日数の計算     Last modified: May 15, 2002

以下のスクリプトの実行結果


2098
2001/01/01
2001 01 01

 2001年1月1日まで、あと2098日か...

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)
}

・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI