マイコン宇宙講座-JST⇔MJD変換

年月日と時刻を指定すると修正ユリウス日を求め、さらに修正ユリウス日から年月日と時刻を計算します。このプログラムでは、求めるユリウス日が協定世界時であるため、指定した年月日および時刻をUTC表示するのですが、計算式が簡略的であるため、メインプログラムの一部において、時刻が0時から8時までの場合、日付が正しく表示されません。このため、サブルーチンjdateを呼び出し、正しく表示されるように変更してあります。

注意: 時刻の指定は秒まで指定してください。

メインルーチン m21.py

# m21.py
# マイコン宇宙講座
# 2-1 JST<->MJD変換プログラム
import lib


print()
std = input('DATE AND TIME(JST) ? ')
dy, dt = std.split(',')
dy = float(dy)
dt = float(dt)

jd, yy, mm, dd, hh, ms, ss = lib.mjd(dy, dt)

# UTC表示のための処理
# 時刻によっては、日の部分が0になってしまうため、サブルーチンjdateを呼ぶ
yy, mm, dd = lib.jdate(jd, lib.T)
# ここまで

print()
print('   INPUT DATE = %4d %2d %7.5f UT' % (yy, mm, dd))
print('         MJD  = %13.5f UT' % (jd))

# サブルーチン julianで求められるのはユリウス日
# 修正ユリウス日にする
jd = lib.julian(yy, mm, dd) - 2400000.5

print()
print('  RETURN DATE = %4d %2d %7.5f UT' % (yy, mm, dd))
print('         MJD  = %13.5f UT' % (jd))
print()

例題 -4712年1月1日 21時00分00秒(JST)からMJDを求めてみよう。

DATE AND TIME(JST) ? -47120101,210000

   INPUT DATE = -4712  1 1.50000 UT
         MJD  = -2400000.50000 UT

  RETURN DATE = -4712  1 1.50000 UT
         MJD  = -2400000.50000 UT