日時とユリウス日の変換

※このページは、JavaScript を使っています。(IE4, NN4 以上を推奨)


《解説》

●ユリウス日について

 「ユリウス日」というのは、天文学、年代学で使用される「時間」の記述法で、1638年に発表された「通日法」です。なぜ天文計算で、これを使用するかというと、暦法、紀元前/後、年、月、日、各国標準時などを意識することなく、「日」という単一の単位(日以下の時刻は、小数で表す)のみで時間を定義できるというメリットがあるからです。

 このユリウス日の起点となる時間、すなわちユリウス日=0 となる瞬間は、ユリウス暦BC4713年1月1日の正午(世界時)です。ちなみに、ユリウス暦というのは、ローマ時代の皇帝であるユリウス・カエサル(Julius Caesar)が定めた暦法で、現在使われているグレゴリオ暦とは少しだけ違います。詳しい話は、専門書を参照して下さい。

 ちなみに、ユリウス日という名前は、ユリウス暦の「ユリウス」という名前とは直接の関係はありません。この「ユリウス日」を考え出したフランス人の Joseph Justus Scaliger が、父親の名前 Julius Caesar Scaliger からとったものだということです。(でも、父親の名前は、ローマ皇帝にちなんだものだと思うんだけどなぁ。)

●プログラムの説明

 JavaScriptプログラムの主要部分は、以下の関数です。
 なお、計算アルゴリズムは、以下の書籍を参考にしました。
  書名:こよみ便利帳
  著者:暦計算研究会編
  発行:恒星社厚生閣(昭和58年)

  書名:天体位置略算式の解説
  著者:暦計算研究会 井上圭典・鈴木邦裕
  発行:海文堂出版(1991年)

関数の機能:
 日時(グレゴリオ暦)からユリウス日を得る。
関数の引数:
 year - 年 [単位:西暦年]
 month - 月[単位:月]
 day - 日[単位:日]
 hour - 時 [単位:時]
 minute - 分 [単位:分]
 stype - 標準時タイプ(0=UT,1=JST)
関数の戻り値:
 ユリウス日 [単位:日]
入力グローバル変数:
 なし
出力グローバル変数:
 なし
function TransDateToJD(year,month,day,hour,minute,stype)
{
  var t,jd;

  if(month<3)
  {
    year -=1;
    month+=12;
  }

  t  =Math.floor(year/100);
  jd =Math.floor(year*365.25)-t+Math.floor(t/4);
  jd+=Math.floor(30.6001*(month+1))+day+hour/24+minute/1440+1720996.5;
  if(stype) jd-=9/24;

  return jd;
}
関数の機能:
 ユリウス日から日時(グレゴリオ暦)を得る
関数の引数:
 jd - ユリウス日 [単位:日]
 stype - 標準時タイプ(0=UT,1=JST)
関数の戻り値:
 なし
入力グローバル変数:
 なし
出力グローバル変数:
 iYear - 変換結果の年 [単位:西暦年]
 iMonth - 変換結果の月 [単位:月]
 iDay - 変換結果の日 [単位:日]
 iHour - 変換結果の時 [単位:時]
 iMinute - 変換結果の分 [単位:分]
function TransJDToDate(jd,stype)
{
  var z,f,aa,a,b,c,k,e;

  if(stype) jd+=0.875;
    else    jd+=0.5
  z =Math.floor(jd);
  f =jd-z;
  aa=Math.floor((z-1867216.25)/36524.25);
  a =Math.floor(z+1+aa-Math.floor(aa/4));
  b =a+1524;
  c =Math.floor((b-122.1)/365.25);
  k =Math.floor(365.25*c);
  e =Math.floor((b-k)/30.6001);

  iDay=Math.floor(b-k-Math.floor(30.6001*e));
  if(e<13.5) iMonth=e-1;
    else     iMonth=e-13;
  if(iMonth>2.5) iYear=c-4716;
    else         iYear=c-4715;
  iHour  =Math.floor(f*24);
  iMinute=Math.floor((f*24-iHour)*60+0.5);
}

☆プログラム実行結果

ユリウス日


HOME
inserted by FC2 system