私は日付変換を伴う多くのプロジェクトに取り組んでいます。たとえば、私は太陽暦とそれらをグレゴリオ暦に変換する方法、およびその逆の方法を研究しています。太陽暦(ペルシア暦)は、グレゴリオ暦の日付とほぼ同じですが、1年の日数は(うるうか否か)です。
しかし、私は最近、旧暦のプロジェクトに取り組みました。月暦を調べていると、月のシステムを太陽に変換する論理的な方法が1つもないことに気づきました(少なくとも私の知る限り)。
以下は、私が調査した参考リンクです。
- イスラム暦の日付からグレゴリオ暦の日付に変換できません(c#)
- イスラム暦からグレゴリオ暦への日付の変換、およびその逆
- イスラム暦日付DateTime.Parseを使用してグレゴリオ暦に
- イスラム暦の日付をグレゴリオ日付に変換する
上記のリンクをたどって、トレーニングとテストの人々が提示したアルゴリズムを調べたところ、絶対に正しいものはないことに気づきました。
それ"1441/02/30" [Safar 30th]
はあなたが試してみたいすべての方法であるグレゴリオ暦の日付に変換するだけです。
私はここにいくつかのテストコードを入れて失敗しました:
CultureInfo arSA = new CultureInfo("ar-SA");
arSA.DateTimeFormat.Calendar = new HijriCalendar();
var dateValue = DateTime.ParseExact("1441/02/30", "yyyy/MM/dd", arSA);
return dateValue.ToString();
上記のコードのエラー:
文字列で表されるDateTimeは、カレンダーSystem.Globalization.HijriCalendarではサポートされていません。
HijriCalendar hc = new HijriCalendar();
DateTime date = new DateTime(1441, 2, 30, hc);
return date.ToString();
上記のコードのエラー:
「2日目の日は1から29の間でなければなりません。」
string hijri = "1441/2/30";
HijriCalendar hc = new HijriCalendar();
int year = int.Parse(hijri.Substring(0, 4));
string rem = hijri.Remove(0, 5);
int end = rem.IndexOf('/', 0);
int month = int.Parse(rem.Substring(0, end));
rem = rem.Remove(0, end + 1);
int day = int.Parse(rem);
DateTime date = new DateTime(year, month, day, hc);
return date.ToShortDateString();
上記のコードのエラー:
「2日目の日は1から29の間でなければなりません。」
その後、私はイスラム暦の変換をグレゴリオ暦の日付に変換するアルゴリズムがあることを理解しようとしていましたか?
だから私はいくつかのイスラムのオンライン日付コンバーターをテストしました、そして私は驚きました!両方の日付コンバータ
に入力"1441/2/30"
してみてください。
最初の1つが戻りOctober 30, 2019
、2番目の1つが29 October 2019
Hijriグレゴリオコンバーターを 返し
ます。
したがって、ヒジュラ暦の日付をグレゴリオ暦に変換する実際のアルゴリズムがあるかどうかはわかりません。
よろしくお願いします。
詳細については、 https://www.wikiwand.com/simple/Islamic_calendar
更新:知っている正しいライブラリがないことを知っています。しかし、誰かがイスラム暦(そのすべてのインターフェース)について知識または詳細を持っている場合は、ここに説明してください。本当にイスラム暦をすべての人に導入したいと思います。
October 30, 2019 wed
かOctober 29, 2019 tue
。今やってみました。
Omar khayyam
おり、ペルシャの数学者によって発明されました。ペルシア暦は365日(うるう年は366日)ですが、月暦はペルシア暦より11〜12日短くなっています。