世界標準時からそのユリウス日を換算する


関数名
ut2jd  世界標準時からそのユリウス日を換算する
形式
long ut2jd(double *d, int year, int month, int day,
           int hour, int min, int sec);
引数
d      (出力)1日の時間を 1 としたときの正午からの時間
year   (入力)年
month  (入力)月 (1 〜 12)
day    (入力)日
hour   (入力)時 (0 〜 23)
min    (入力)分 (0 〜 59)
sec    (入力)秒 (0 〜 59)
関数値
ユリウス日の値
注意事項
・引数として渡される西暦年月日が実在するかどうかは
 本関数内ではチェックしない。

用例(ut2jd-test.c
double d;
ut2jd(&d, 1996, 2, 29, 12, 0, 0);

プログラム(ut2jd.c
long ut2jd(double *d, int year, int month, int day,
           int hour, int min, int sec)
{
    int  bc, gregory; 
    long j;

    bc = year <= 0;
    
    /* First day at Gregory's calendar */
    gregory = year > 1582 || (year == 1582 && month > 10) ||
              (year == 1582 && month == 10 && day >= 15);
            
    if (month <= 2) {
        year--;
        month += 12;
    }
    
    if (hour < 12) {
        j = 0;
        *d = 0.5;
    } else {
        j = 1;
        *d = -0.5;
    }
    *d += (hour*3600L + min*60 + sec)/86400.0;
    
    j += bc ? (year-3)/4 : year/4;
    if (gregory) j+= 2 - year/100 + year/400;
    j += 1720994L + year*365L + (month+1)*30 + (month+1)*3/5 + day;
    
    return j;
}
説明
日常生活で時刻といえば、年・月・日・時・分・秒を使っている。 しかし計算には60進法、月の大小、閏年か平年か、さらに元号といった ものが混在している。天文学の世界では、ある決められた起算日から 日付を積算していくユリウス日(ユリウス通日)という非常に便利な 時の尺度がある。

そのユリウス日の0.0日は紀元前4713年(-4712年)1月1日の正午で、 翌日の正午がユリウス日1.0日である。1991年6月15日世界標準時0時 のユリウス日は2448422.5日になる。

関連関数
ユリウス日を世界標準時に換算する