.Net Как проанализировать строку даты персидского / фарси (календарь jalali) в объект DateTime?

StackOverflow https://stackoverflow.com/questions/5811170

  •  25-10-2019
  •  | 
  •  

Вопрос

Я сталкивался с несколькими замечательными библиотеками кода для преобразования персидского (календарного календаря) в григорианскую дату. Тем не менее, мой исходный источник - это строка, а не объект DateTime. Похоже, что нет официальной поддержки в .NET Framework для дат анализа с использованием персидского календаря (если я ошибаюсь, пожалуйста, покажите мне!).

Моя цель:

string persianDateString="1390/02/07";
DateTime persianDateTime = MyPersianParser.Parse(persianDateString, "yyyy/mm/dd");

И, конечно же, некоторые даты могут использовать имена слов в течение нескольких месяцев и дней недели, поэтому я хотел бы иметь возможность поддерживать стандартный протокол строки формата.

РЕДАКТИРОВАТЬ: Я знаю о типичной функции DateTime.parse. Персидский календарь не может быть использован, потому что Microsoft оставила его неполным и/или не исправят его. Если кто -то сможет указать мне на какой -то персидский код анализа даты, я был бы благодарен. Если нет, я попрошу кого -то удалить вопрос и просто написать его сам.

Это было полезно?

Решение 2

Для анализа строки даты я просто использую календарь по умолчанию, чтобы получить значения даты (год, месяц, день и т. Д.)

Я тогда использую Эта библиотека здесь Чтобы преобразовать персидские значения даты в григорианские значения даты.

Мой код теперь выглядит так:

string persianDate = "1390/02/07";
CultureInfo persianCulture = new CultureInfo("fa-IR");
DateTime persianDateTime = DateTime.ParseExact(persianDate, "yyyy/MM/dd", persianCulture);    // this parses the date as if it were Gregorian

JalaliCalendar jc = new JalaliCalendar();
// convert the Persian calendar date to Gregorian
DateTime gregorianDateTime = jc.ToDateTime(persianDateTime.Year, persianDateTime.Month, persianDateTime.Day, persianDateTime.Hour, persianDateTime.Minute, persianDateTime.Second, persianDateTime.Millisecond);

Конечно, мне придется позаботиться о компонентах даты с именами (месяцы, дни недели), но я могу справиться с этим довольно легко.

Другие советы

Вы всегда можете использовать Native System.globalization.persiancalendar .net. Но это немного сложно.

Рассмотрим этот код для преобразования с даты Jalali (здесь 1387/03/18) в Gregorian DateTime:

System.Globalization.PersianCalendar persianCal = new System.Globalization.PersianCalendar();
    DateTime GregorianDate = persianCal.ToDateTime(1387, 3, 18, 12, 0, 0, 0);

и следующий код для преобразования григорианского DateTime (здесь 1983/08/03) в строку персидской даты:

DateTime GregorianDate = DateTime.Parse("1983/08/03");
string FarsiDateConverted = persianCal.GetYear(GregorianDate).ToString("0000") + "/" +
             persianCal.GetMonth(GregorianDate).ToString("00") + "/" +
             persianCal.GetDayOfMonth(GregorianDate).ToString("00");

Просто примечание для ссылки, предоставленной судебным приставом @Dan, я должен повторить автора слова статьи:

«Основной целью использования этого jalaicalendar вместо персианкалендара .NET является необходимость в дате разговора для исторических событий. Если вы просто хотите показать текущую дату на вашем сайте, персинкалендарь достаточно».

Фактически, алгоритм .NET Framework верен для годов с 1178 по 1634 г. Джалали (с 1799 по 2256 григорианский)

Обновлять:

Начиная с .NET Framework 4.6, класс Persiancalendar использует хиджри Солнечный астрономический алгоритм а не алгоритм наблюдения для расчета дат. Это делает реализацию Persiancalendar в соответствии с персидским календарем, используемым в Иране и Афганистане, в двух странах, в которых персидский календарь используется в большинстве случаев. Поэтому, если вы используете> 4.6 версию .NET Framework, вам не нужны другие библиотеки для преобразования дат в/из персидского календаря.

Или же:

using System.Globalization;

CultureInfo MyCultureInfo = new CultureInfo("fa-IR");
      string MyString = "1390/02/07";
      DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo);

Есть еще пример:http://msdn.microsoft.com/en-us/library/2h3syy57.aspx#y418

Попробуйте его в ASP.NET MVC для проверки персидской даты

 [RegularExpression(@"^$|^([1۱][۰-۹ 0-9]{3}[/\/]([0 ۰][۱-۶ 1-6])[/\/]([0 ۰][۱-۹ 1-9]|[۱۲12][۰-۹ 0-9]|[3۳][01۰۱])|[1۱][۰-۹ 0-9]{3}[/\/]([۰0][۷-۹ 7-9]|[1۱][۰۱۲012])[/\/]([۰0][1-9 ۱-۹]|[12۱۲][0-9 ۰-۹]|(30|۳۰)))$", ErrorMessage = "Not Validate")]

Для получения дополнительной информации о проверке персидской даты посетите эту ссылку

اعتبار увагла

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top