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


関数名
jd2ut  ユリウス日を世界標準時に換算する
形式
void jd2ut(int *year, int *month, int *day, int *hour,
           int *min, int *sec, long j, double d);
引数
year   (出力)年
month  (出力)月
day    (出力)日
hour   (出力)時 (0 〜 23)
min    (出力)分 (0 〜 59)
sec    (出力)秒 (0 〜 59)
j      (入力)ユリウス日の整数部分
d      (入力)ユリウス日の小数部分
関数値
なし
注意事項

用例(jd2ut-test.c
int year, month, day, hour, min, sec;
jd2ut(&year, &month, &day, &hour, &min, &sec, 2448422L, 0.5);

プログラム(jd2ut.c
void jd2ut(int *year, int *month, int *day,
     int *hour, int *min, int *sec, long j, double d)
{
    long c, k, e, s;

    if (d >= 0.5) {
        j++;
        d -= 0.5;
    } else d += 0.5;

    if (j >= 2299161) j = j + 1 + (j-1867216)/36524 - (j-1867216)/146096;
    j += 1524;

    c = (j - 122.1)/365.25;
    k = 365L*c + c/4;
    e = (j - k)/30.6001;

    *year = c - 4716;
    *month = e - 1;
    if (*month > 12) {
       (*month) -= 12;
       (*year)++;
    }
    *day = j - k - (long)(30.6*e);

    s = d * 86400 + 0.5;
    *hour = s / 3600;
    *min = (s % 3600) / 60;
    *sec = s % 60;
}
説明
日常生活で時刻といえば、年・月・日・時・分・秒を使っている。 しかし計算には60進法、月の大小、閏年か平年か、さらに元号といった ものが混在している。天文学の世界では、ある決められた起算日から 日付を積算していくユリウス日(ユリウス通日)という非常に便利な 時の尺度がある。

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

ユリウス日の起算日紀元前4713年1月1日はユリウス暦による日付で、 ユリウス暦は紀元前46年にユリウス・カエサルが採用したものである。 ユリウス暦は1582年10月4日まで使われ、その翌日はグレゴリオ 暦の同年10月15日である。

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