こんにちは。
jdcal 1(グレゴリウス暦日付 (year, month, day) を修正ユリウス日(MJD)から求める変換計算) というものを見つけたので検算して正しいことを確認しました。
確認は、「ユリウス通日」 (Wikipedia) の計算式(→「ユリウス日とグレゴリウス暦日付との間の換算」の mjd2date() )の結果と一致をみました。
$ pip install jdcal
$ ./test_jdcal.py
passed
test_jdcal.py
# !/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
from jdcal import jd2gcal
def test():
for mjd in range(146097):
w = {jd2gcal: jd2gcal(2400000.5, mjd)[:3], mjd2date: mjd2date(mjd)}
if w['jd2gcal']!=w['mjd2date']:
print(w['jd2gcal'], "!=", w['mjd2date'])
return
print(' passed')
# conversion from modified Julian date to Gregorian calendar date
def mjd2date(mjd):
n = mjd + 678881 # Gregorian
a = 4*n + 3
a += 4*((3*((4*(n+1))//146097+1))//4) # Gregorian
b = 5*((a%1461)//4) + 2
year, month, day = a//1461, b//153 + 3, (b%153)//5 + 1
if month > 12:
year, month = year+1, month%12
return year, month, day
test()
exit(0)