.NETペルシャ /ファージーの日付文字列(jalaliカレンダー)をDateTimeオブジェクトに解析する方法は?
質問
ペルシャ語(ジャラリカレンダー)の日付をグレゴリオの日付に変換するために、いくつかの優れたコードライブラリに出会いました。ただし、私の元のソースは文字列であり、DateTimeオブジェクトではありません。ペルシャカレンダーを使用して日付を解析するための.NETフレームワークには公式のサポートはないようです(私が間違っている場合は、私に見せてください!)。
私の目標:
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);
もちろん、私は自分で名前(数ヶ月、曜日)の日付コンポーネントの世話をする必要がありますが、それを簡単に対処できます。
他のヒント
ネイティブSystem.globalization.PersianCalendar .NETクラスをいつでも使用できます。しかし、それは少し難しいです。
Jalaliの日付(ここ1387/03/18)からグレゴリオの日付への変換のためのこのコードを考慮してください。
System.Globalization.PersianCalendar persianCal = new System.Globalization.PersianCalendar();
DateTime GregorianDate = persianCal.ToDateTime(1387, 3, 18, 12, 0, 0, 0);
そして、グレゴリオ年の日付(ここ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 Bailiffが提供するリンクのちょうどメモ私は記事の言葉の著者を繰り返す必要があります。
「.NET FrameworkのPersianCalendarの代わりにこのJalaicalEndarを使用する主な目的は、歴史的な出来事の日付会話の必要性でなければなりません。ウェブサイトに現在の日付を表示したい場合、PersianCalendarで十分です。」
実際、.NETフレームワークのアルゴリズムは、1178年から1634年のジャラリ(1799年から2256年のグレゴリオ)の間正しいです
アップデート:
.NETフレームワーク4.6から始まります, 、ペルシアンカレンダークラスはヒジュリを使用しています 太陽天文アルゴリズム 日付を計算するための観測アルゴリズムではなく。これにより、ペルシャの暦が最も広く使用されている両国であるイランとアフガニスタンで使用されているペルシャ暦と一致しているペルシアンカレンダーの実装が一致しています。したがって、.NETフレームワークの4.6バージョンを使用している場合、ペルシャカレンダーとの日付を変換するために他のライブラリは必要ありません。
または:
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")]
ペルシャの日付の検証の詳細については、このリンクをご覧ください