儒略日的用途及其轉換

我們現在所使用的以西元年月、日表示的格里曆(Gregorian calendar),就像是把日期折疊起來表示的曆法。對我們平常的認知來說,這是很自然的,但因它不像十進位數那麼規律和單純,在做一些計算時很不方便,尤其在作不同曆法之間的轉換時更是麻煩。

法國學者 Joseph Justus Scaliger1540-1609)設計了一種曆法,稱為儒略日”(Julian day)。以JD表示。它是以7980年為一週期,我們所在的這一週期是以西元前4713(-4712)1112時為起點,在這週期內,每一個數就對應唯一的一個日,就像是把一般的日曆拉成一直線,完全以天數來計日,如此在計算上十分方便,

例如,我們若要知道200011日為星期幾,則可先求出這一日的儒略日為2451545(此即自西元前47131112時起至20001112時止之日數)。若西元前471311日為星期一,則求出(2451545+1)除以7的餘數為6,即為星期六。當餘數為0時代表星期天。

同樣的,在求算中國的日天干與日地支時亦是如此,若西元前471311日的天干為,這是天干中的第十個,若以第一個對應0,第二個對應1,第三個對應2,依此類推至第十個應對應9,所以求出(2451545+9)除以10的餘數為4,即之對應。

若西元前471311日的地支為,這是地支中的第二個,若以第一個對應0,第二個對應1,第三個對應2,依此類推至第十二個應對應11,所以求出(2451545+1)除以12的餘數為6,即之對應。

要將格里曆日期轉換為儒略日,可有許多不同的方法或公式。底下即為一種方法。若以y代表年份,m代表月份,d代表月中日期,ut代表時(若含分、秒,可先化為小數的時,再加上整數的時)int() 為程式中常用的取整數函數(在javascript中以Math.floor()替代)。mod 為取餘數之函數(在javascript中以%替代),x mod y就表示取x除以y的餘數。計算原則是以3月為一年之首月,2月為一年之末月,使229日成為四年的最後一日。如果我們以3月為一年中的第一個月,2月為前一年的末月,則經變數變換:

                 12月歸為前一年

         3~12月對應到0~9月,將1~2月對應到10~11

下式為將格里曆轉換為儒略日的公式,適用於15821015日及以後:

格里曆是在西元15821015日開始使用的,在這之前使用的是儒略曆(與儒略日不同,不要混淆了),這是在西元前46年,由羅馬帝國的愷撒大帝所制訂。它只設定每隔四年的2月為閏月,所以平年為365日,閏年為366日。平均每年為365.25日。但平均回歸年為365.24219日,與365.25日差了約0.00781日,1500年後就差了11.7日。1582年,羅馬教皇格里高利十三世對儒略曆進行修改,在原有的基礎上規定百年不閏,四百年又閏。稱為格里曆,自1582104日的次日開始使用。但為了減少先前儒略曆所造成的日數誤差,104日的次日直接跳到15日。

 

下式為將儒略曆轉換為儒略日的公式,適用于西元元年至1582104日及以前:

轉換的方法並非唯一,讀者亦可試著自行設計一個轉換副程式或函式。

反過來,儒略日轉換為格里曆或儒略曆,也是以1582年的10150時為分界點。在這之前為儒略曆,之後為格里曆。通常與它的JD2299160.5日比較。

轉換的方法亦可有多種,請直接參考程式原始檔中的函式Jtime()