以下のスクリプトの実行結果
2098 2001/01/01 2001 01 01
J_day と date は互いに逆関数の関係にある。
これらを使うと、曜日とか、ある年が閏年かとかを求める関数を作れる。
BEGIN { print J_day(2001, 1, 1)-J_day(1995, 4, 5) # 経過日数の計算 print date(J_day(1995, 4, 5)+2098) # 日数経過後の年月日 split(date(J_day(1995, 4, 5)+2098), ymd, "/") # ばらして配列へ print ymd[1], ymd[2], ymd[3] } # 西暦年月日からユリウス日を得る # y 年 m 月 d 日 function J_day(y, m, d) { return d-32075+int( 1461*(y+4800+ int( (m-14)/12) )/4 ) \ +int( 367*(m-2-int( (m-14)/12 )*12)/12 ) \ -int( 3*( int( (y+4900+int( (m-14)/12 ))/100 ) )/4 ) } # ユリウス日から西暦年月日を得る function date(jul, l, n, iy, jm, kd) { l = jul+68569 n = int(4*l/146097) l -= int((146097*n+3)/4) iy = int(4000*(l+1)/1461001) l -= int(1461*iy/4)-31 jm = int(80*l/2447) kd = l-int(2447*jm/80) l = int(jm/11) jm = jm+2-12*l iy = 100*(n-49)+iy+l return sprintf("%4d/%02d/%02d", iy, jm, kd) }