LoginSignup
1
5

More than 3 years have passed since last update.

グレゴリウス暦日付を修正ユリウス日から求める

Last updated at Posted at 2017-06-21

こんにちは。
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)

  1. しかし、この jdcal(の jd2gcal)が行っている計算式は、他と比較すると出来栄えがあまり優れていません。 

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5