Julian Day
ユリウス日
 
introduction: ユリウス日は整数ではない
 
. 基準日は紀元前4713年1月1日の正午
. ユリウス日には時差がない
. 西暦の不連続性
 
chapter1: ユリウス暦からグレゴリオ暦へ
 
1-1. ローマ法王グレゴリオ13世の布告
1-2. ニケーア公会議とイースター
1-3. カトリック系とプロテスタント系
 
chapter2: 準ユリウス日
 
chapter3: 意外に知らないうるう年
 
OMAKE: How to calculate Julian Day in the style of C language
 
O-1. Date_to_JulianDay
O-2. JulianDay_to_Date
 
 
 
 
introduction: ユリウス日は整数ではない

基準日は紀元前4713年1月1日の正午

天文学者は正午に始まり正午に終わる24時間をユリウス日(Julian Day Number)という整数で数えます。しかしユリウス日(Julian Day)は整数では無く、実数なのです。

ユリウス日(Julian Day)とは、紀元前4713年1月1日を基準とした連続した日数のことで、起算開始時間は正午です。次の日の正午は1日ですが、午前0時は0.5日ということになります

幾つか例示しておきましょう

西 暦 時 刻 ユリウス日
紀元1年1月1日 午前0時 1721423.5
1858年11月17日 午前0時 2400000.5
2001年1月1日 正午 2451911.0


ユリウス日には時差がない

時差が無いというのは、特定のある瞬間には、地球上のどの場所でも同じユリウス日だということです。

基準となるのは、UT(Universal Time)なので、ロンドンで2001年1月1日の正午にユリウス日が2451911.0である瞬間には、日本では2001年1月1日の21時でユリウス日は同じ2451911.0となります


西暦の不連続性

西暦には0年がありません。紀元前1年12月31日の次の日は紀元1年1月1日です。しかし、これをユリウス日で言えば、1721423、1721424と連続した通日となります。
ユリウス日を使う便利な側面の一つです

更に、ユリウス暦からグレゴリオ暦に切り替えられた時にも、不連続な暦となりました。次のチャプターで説明しますが、この場合のユリウス暦はユリウス日とは関係がありません


 
 
chapter 1: ユリウス暦からグレゴリオ暦へ

1582年10月4日のユリウス日は2299160で、同年10月15日のユリウス日は2299161です。グレゴリオ暦には、10月5日から10月14日がないからです。


1-1. ローマ法王グレゴリオ13世の布告

ユリウス暦は、ジュリアス・シーザー(ユリウス・カエサル:Julius Caesar)によって制定され、365.25日を太陽年として、平年を365日とし4年に一回うるう年としていました。ところが、太陽年は正確には365.2422日だったので、毎年11分15秒だけ早く日付を進めてしまっていたのです。これを調整する為に、グレゴリオ13世は次の2つの布告を1582年2月24日に発表しました。

1.3月21日を春分の日とする為に、1582年10月4日の次の日を10月15日とする

2.西暦年数が4で割り切れる年をうるう年とする。但し、100で割れて400で割れない年は平年とする

これにより、西暦は不連続な暦となったのです。


1-2. ニケーア公会議とイースター

325年のニケーア公会議で開かれた宗教裁判で、春分の日は3月21日と定められていました。これは、イースター(復活祭)の日を、春分の日もしくはそれ以降の最初の満月の日以降の最初の日曜日とするためでした。

ところがユリウス暦では、春分の日がグレゴリオ13世の時代である16世紀には3月11日になってしまっていたのです。グレゴリオ13世の布告の1はこれを是正する為でした。


1-3. カトリック系とプロテスタント系

ローマ・カトリック系の国々、イタリア,フランス,スペイン,ポルトガル,ポーランド、では布告通りに1582年にグレゴリオ暦を採用しました。数年遅れて採用したカトリック系の国もありました。

しかし、プロテスタント系の国ではグレゴリオ暦への変更が大きく遅れたのです。イギリスは1752年,ソ連は1918年,中国は1912年といった具合にです



 
 
chapter 2: 準ユリウス日

ユリウス日では数値が大き過ぎるということで、準ユリウス日(Modified Julian Day)が採用されることがあります。基準となるのは、1858年11月17日の午前0時で、ユリウス日から2400000.5だけ小さい数値になります。

ユリウス日がわかっていれば、計算は至って簡単です。

Modified Julian Day = Julian Day - 2400000.5



 
 
chapter 3: 意外に知らないうるう年

一般にうるう年は4年に一度で、4で割り切れる年数として知られています。しかし、グレゴリオ13世の告知通りに考えれば、例えば2100,2200,2300年はうるう年ではありません。4で割り切れても、100で割り切れて400で割り切れないからです。これにより、4年に一度うるう年とするユリウス暦と比較して、400年に3回だけ平年が増えます。
実際の太陽年と暦との誤差を極小なものにしたのです。



 
 
OMAKE: How to calculate Julian Day in the style of C language

ユリウス日を算出するC言語のソース・コードです。不正データ(西暦0年など)のチェックはしていません。


O-1. Date_to_JulianDay

#include <math.h>

long Date_to_JulianDay(int mm, int dd, int yy)
{
	long julian;
	int t, y, m;

	y=yy;

	if(y<0) ++y;
	if(mm>2) {
		m=mm+1;
	} else {
		--y;
		m=mm+13;
	}
	julian=long(floor(365.25*y)+floor(30.6001*m)+dd+0x1A42A3);
	if(dd+0x1F*(mm+0x0C*yy)>=0x8FC1D) {
		t=int(0.01*y);
		julian+=2-t+int(0.25*t);
	}
	return julian;
}
	


O-2. JulianDay_to_Date

#include <math.h>

void JulianDay_to_Date(julian,yy,dd,mm)
long julian;
int *yy,*dd,*mm;
{
	long t,a,b,c,d,e;

	if(julian>=0x231519) {
		a=(float(julian-0x1C7DD0)-0.25)/36524.25;
		t=julian+1+a-long(0.25*a);
	} else {
		t=julian;
	}
	b=t+0x5F4;
	c=0x1A18+(float(b-0x253ABE)-122.1)/356.25;
	d=0x16D*c+(0.25*c);
	e=(b-d)/30.6001;
	*dd=b-d-int(30.6001*e);
	*mm=e-1;
	if(*mm>12) *mm-=12;
	*yy=c-4715;
	if(*mm>2) --(*yy);
	if(*yy<=0) --(*yy);
}