ユリウス通日に関して、元ネタでは紀元前1年の3月1日を0日目として計算するアルゴリズムが紹介されているようです。ところがWikipediaで調べてみると、実際には、ユリウス日はユリウス暦紀元前4713年1月1日の正午から、修正ユリウス日は西暦1858年11月17日の0:00からの通日になっているようです。今回はWikipediaの記事に基づいて関数を実装し、ke!sanのサービスを使って検算を行いました。

まずは修正ユリウス日を求める関数を実装してみます。

いつもは1月を0としていますが、今回の記事では1月は1として扱っていますのでその点は注意が必要です。1月を0として扱うには関数の内部でmに1を足してください。

先ほどの関数はあくまでも修正ユリウス日でした。これを(修正ではない)ユリウス日に直すには、2400000.5を足して上げればOKです。

最後に、ユリウス暦から修正ユリウス日を求める関数も実装してみます。

検算はWikipediaの例にあった1582年2月1日を入力して行いました。(修正ではない)ユリウス日への変換関数は割愛します。

今回はほとんどC++は関係ありませんでしたが、まあ良しとしましょう。


元ネタ

↑ 10. 日付・グレゴリオ暦計算テンプレート