N88-BASICでユリウス日(JD) (2回目)

2021/9/25(土)
N88-BASICでユリウス日(JD) (2回目)
 
ユリウス(Julius)日(JD)の逆算をします
 
以後ガウス記号[]を使用します
[a]はBASICではINT(a)、Cではfloor(a)
で、aを超えない最大の整数です
[1.9] = 1、[-1.9] = -2
 
DD = JD + 0.5として、DDを
紀元前4713(-4712)年1月1日(月)0:00(世界時)
からの日数とします(JD 0日ならDD=0.5日)
 
J = [d]    日数
d = d - J  時間
日数部分で計算し、結果の日付に時間部分を足します
 
J >= 2299160.5 + 0.5 なら次の
グレゴリオ暦からユリウス暦への変換処理が入ります
 
前回説明した1582/10/4までの暦による日数差を補正
しグレゴリオ暦の日数へ変換、J = J - (12 - 10)
0/3/1 = JD1721117.5からの日数を年に変換
Y = {J - (1721117.5 + 0.5) + 1} / 365.2425
この年を使って、ユリウス暦の日数に変換
J = J + [Y / 100] - [Y / 400]
この後はユリウス暦と同じ処理へ
 
ユリウス暦
紀元前4713(-4712)年1月1日0:00(世界時)
から
紀元前4713(-4712)年2月29日0:00(世界時)
までが59日で、この日から
紀元前4713(-4708)年2月29日0:00(世界時)
までが365x3+366 = 365.25x4となるので
 
J = J - 31 - 28として
y = [(J - α) / 365.25]で年を取出します
 
J = J - [365.25y] + 122
 
で、その年の日数部分J - [365.25y]として
3月1日を1日目とした日数にし、
前回使用した数列an=[30.601n]が月の日数に
合うようにシフトするため122を足し、
m = [J / 30.601]で月を取出します
(m = 4~15 = 3月-14月に対応)
 
ただし、閏年の2/29日は365.25で割り切れて
次の年で、日数が0になるため
α = 0.001 (他に影響しない微小値s)を引いて
無理やりその年で、日数が366になるように
しています
 
d = d + J - [30.601m]
でその月の日付に保存しておいた時間dを
足して小数付きの日付とする
 
m = m - 1 (m = 3~14へ)
if m > 12 then m = m - 12: y = y + 1
で、13,14月を次の年の1,2月に変更し、
y = y - 4712
で、-4712年の時y = 0としていたのを、
y = -4712に変換して終了です
 
デバッグ用のデータが多いですが
本体はそれほど長くはないです



 







NL-BASICとblg~.zip(juli002.bas)は
このブログ(以下のリンク)から
ダウンロードできます

https://ulprojectmail.blogspot.com
Readme.txtを読んで遊んで下さい

 

このブログの人気の投稿

NEWS

N88-BASICでゲーム (1回目)