13

ペルシア暦(ジャラーリー暦)の日付をグレゴリオ暦の日付に変換するためのいくつかの優れたコードライブラリに出くわしました。ただし、元のソースは文字列であり、DateTimeオブジェクトではありません。ペルシャ暦を使用して日付を解析するための.NETFrameworkの公式サポートはないようです(間違っている場合は、見せてください!)。

私の目標:

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

もちろん、一部の日付では月と曜日に単語名が使用される場合があるため、標準形式の文字列プロトコルをサポートできるようにしたいと思います。

編集:私は典型的なDateTime.Parse機能について知っています。ペルシャ暦は、Microsoftが不完全なままにしている、または修正しないため、使用できません。誰かが私にペルシャの日付解析コードを教えてくれるなら、私は感謝するでしょう。そうでない場合は、誰かに質問を削除して自分で書くように依頼します。

4

4 に答える 4

14

ネイティブのSystem.Globalization.PersianCalendar.NETクラスをいつでも使用できます。しかし、それは少しトリッキーです。

Jalali Date(ここでは1387/03/18)からGregorianDateTimeに変換するための次のコードを検討してください。

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 Bailiffによって提供されたリンクについてのメモだけで、記事の著者を繰り返す必要があります。

「.NETFrameworkのPersianCalendarの代わりにこのJalaiCalendarを使用する主な目的は、履歴イベントの日付会話の必要性である必要があります。Webサイトに現在の日付を表示するだけの場合は、PersianCalendarで十分です。」

実際、.NET Frameworkのアルゴリズムは、1178年から1634年までのJalali(1799年から2256年までのグレゴリオ暦)で正しいものです。

アップデート:

.NET Framework 4.6以降、PersianCalendarクラスは、観測アルゴリズムではなく、イラン暦の太陽天文アルゴリズムを使用して日付を計算します。これにより、PersianCalendarの実装は、ペルシャ暦が最も広く使用されている2つの国であるイランとアフガニスタンで使用されているペルシャ暦と一致します。したがって、4.6を超えるバージョンの.NET Frameworkを使用する場合、ペルシア暦との間で日付を変換するために他のライブラリは必要ありません。

于 2011-07-27T15:23:40.730 に答える
4

日付文字列を解析するには、デフォルトのカレンダーを使用して日付値(年、月、日など)を取得します。

次に、ここでこのライブラリを使用して、ペルシャの日付値をグレゴリオの日付値に変換します。

私のコードは次のようになります。

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);

もちろん、名前(月、曜日)のある日付コンポーネントは自分で処理する必要がありますが、これは非常に簡単に処理できます。

于 2011-04-28T19:12:20.313 に答える
3

または:

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

于 2011-04-27T22:12:12.880 に答える
0

ペルシア語の日付を検証するためにASP.NETMVCで試してください

 [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")]
于 2017-07-24T19:22:28.640 に答える