5

C# のようにペルシャ (太陽暦) の日付を表すのに問題がありますDateTime。具体的には、特定の月の特定の日、たとえば 31/04 など、グレゴリオ暦ではそのような日付は無意味です。

System.Globalization.PersianCalendar p = new System.Globalization.PersianCalendar();
DateTime date = new DateTime(2013,7,22);
int year = p.GetYear(date);
int month = p.GetMonth(date);
int day = p.GetDayOfMonth(date);
DateTime d1 = new DateTime(year, month, day);

上記のコードは、次のArgumentOutOfRangeExceptionことわざ になります。Year, Month, and Day parameters describe an un-representable DateTime.

これは予想されます。

DateTime30/02 や 31/04 などの日付を考慮して、.NET でペルシャの日付を s として表現するにはどうすればよいですか?

4

2 に答える 2

3

上記のコードでは、ArgumentOutOfRangeException が発生し、Year、Month、および Day パラメーターが表現できない DateTime を記述しています。

はい、カレンダーを指定しない限り、DateTime引数はグレゴリオ暦であると想定されるためです。ただし、カレンダーを指定できます。

DateTime d1 = new DateTime(year, month, day, p);

ここで を取るd1.Yearと 2013 年に戻ることに注意してください。基本的にyear...DateTime常にグレゴリオ暦ではありません。ただし、ペルシャ暦を既定の暦として持つカルチャを使用する場合は、DateTimea を文字列にフォーマットするときに値が適切に変換されます。編集: 残念ながら、ドキュメントに従って:

現在、PersianCalendar クラスは、CultureInfo クラスでサポートされているカルチャのオプションのカレンダーではないため、既定のカレンダーにすることはできません。

コメントがNoda Timeに言及しているように、私はそれに対処することができます.それはまだペルシャのカレンダーをサポートしていません. 旧暦のイスラム暦をサポートしていますが、太陽暦はサポートしていません:(将来のリリースに追加することを検討できます...

于 2013-07-31T07:04:23.140 に答える
1

MSDNから;

各 DateTime メンバーは暗黙的にグレゴリオ暦を使用して操作を実行します。ただし、カレンダーを指定するコンストラクターと、暗黙的にカレンダーを指定する System.Globalization.DateTimeFormatInfo などの IFormatProvider から派生したパラメーターを使用するメソッドは除きます。

また、PersianCalendar クラスから

現在、PersianCalendar クラスは、CultureInfo クラスでサポートされているカルチャのオプションのカレンダーではないため、既定のカレンダーにすることはできません。

あなたが望むことは、私には不可能に思えます。

于 2013-07-31T07:10:42.307 に答える