-
[求助]儒略日数的计算
Posted by superwu on 30 5 月, 2010 在 1:28 下午由儒略日推算历日
将JD加上0.5,令 Z 为其整数部分,F 为尾数(小数)部分。
若 Z < 2299161,取A = Z 若 Z 大于等于2299 161,计算 α=INT((Z-1867216.25)/36524.25) ,A=Z+1+α-INT(α/4) 然后计算 B = A+1524 C = INT((B-122.1)/365.25) D = INT(365.25C) E = INT((B-D)/30.6001) 该月日期(带小数部分)则为:d = B - D - INT(30.6001E) + F 月份m为: IF E < 14 THEN m = E – 1 IF E=14 or E=15 THEN m = E – 13 年份为y: IF m>2 THEN y = C – 4716
IF m =1 or m=2 THEN y = C – 4715
这个公式里求E时用的数30.6001不能代之以30.6,哪怕计算机没有先前所说的问题。否则,你得到的结果会是2月0日而不是1月31日,或者4月0日而不是3月31日。上面的是使用儒略日推算日期的算法,但是我看不懂里面的参数,有那位大侠能帮忙解释一下,非常感谢!
-
2 Replies
-
1. JD + 0.5,即 JD 的起始時刻由傳統的 BC 4713-01-01 12:00 GMT 提前至 BC 4713-01-01 00:00 GMT(新起始時刻)。
2. Z 為整數部份,即 Z = 新起始時刻開始經歷的完整日數。
3. Z < 2299161,即 Z 在格列歌里曆的 AD 1582-10-15 00:00 GMT (或儒略曆的 AD 1582-10-05 00:00 GMT)之前,即 Z 所在日應使用儒略曆表達,故無須進行曆法調整,直接取 A = Z。跳往第 5 步。 4. 若 Z 大於或等於 2299161,即 Z 所在日應使用格列歌里曆表達,故須進行曆法調整,使 Z 以格列歌里曆表達的日期等同於 A 以儒略曆表達的日期,因為往後以 A 進行計算儒略曆日期比較方便。 (以下內容比較繁瑣,如不耐煩,可以略過,直接往第 5 步。) 4.1 曆法調整的原則為自 1582 年以後的世紀年(如 1700,1800,1900 等)格列歌里曆不置潤日,但世紀年能被 4 整除時(如 1600,2000 等)除外,即平均每 400 年格列歌里曆較儒略曆減少 3 日,一格列歌里世紀平均為 36524.25 日。 4.2 當 Z = 2299161 時,A = Z + 10 (見上面第 3 步所述兩種曆法表達的日期相差天數可知)。 4.3 格列歌里曆的 AD 1600-02-29 保留潤日,翌日為 AD 1600-03-01(此時的 Z = 2305508),A 與 Z 之差保持不變,A = Z + 10。 4.4 格列歌里曆的 AD 1700-02-29 取消不潤,變成為 AD 1700-03-01(此時的 Z = 2342032),即自此日開始,A = Z + 11。1600-03-01 開始的格列歌里世紀週期共 36524 日。 4.5 格列歌里曆的 AD 1800-02-29 取消不潤,變成為 AD 1800-03-01(此時的 Z = 2378556),即自此日開始,A = Z + 12。1700-03-01 開始的格列歌里世紀週期共 36524 日。 4.6 格列歌里曆的 AD 1900-02-29 取消不潤,變成為 AD 1900-03-01(此時的 Z = 2415080),即自此日開始,A = Z + 13。1800-03-01 開始的格列歌里世紀週期共 36524 日。 4.7 格列歌里曆的 AD 2000-02-29 保留潤日,翌日為 AD 2000-03-01(此時的 Z = 2451605),A 與 Z 之差保持不變,A = Z + 13。1900-03-01 開始的格列歌里世紀週期共 36525 日。 4.8 α=INT((Z-1867216.25)/36524.25) 其實是試圖計算自 AD 400-03-01 00:00 GMT(Z = 1867218)起至今經歷的完整格列歌里世紀數。但其實 AD 400 至 AD 1582 之間根本還沒有使用格列歌里曆,所以 α 的公式如按 Z = 1867218 計算則結果將有所偏差。 4.9 AD 400-03-01 00:00 GMT 至格列歌里曆 AD 1600-03-01 00:00 GMT 共 12 個儒略世紀減 10 日,即 12 個格列歌里世紀減 1 日,若計算 α 時的分母是格列歌里世紀的日數,則分子應加 1。 4.10 AD 400-03-01 00:00 GMT 至格列歌里曆 AD 1700-03-01 00:00 GMT 共 13 個儒略世紀減 11 日,即 13 個格列歌里世紀減 1.25 日,若計算 α 時的分母是格列歌里世紀的日數,則分子應加 1.25。 4.11 AD 400-03-01 00:00 GMT 至格列歌里曆 AD 1800-03-01 00:00 GMT 共 14 個儒略世紀減 12 日,即 14 個格列歌里世紀減 1.5 日,若計算 α 時的分母是格列歌里世紀的日數,則分子應加 1.5。 4.12 AD 400-03-01 00:00 GMT 至格列歌里曆 AD 1900-03-01 00:00 GMT 共 15 個儒略世紀減 13 日,即 15 個格列歌里世紀減 1.75 日,若計算 α 時的分母是格列歌里世紀的日數,則分子應加 1.75。 4.13 AD 400-03-01 00:00 GMT 至格列歌里曆 AD 2000-03-01 00:00 GMT 共 16 個儒略世紀減 13 日,即 16 個格列歌里世紀減 1 日,若計算 α 時的分母是格列歌里世紀的日數,則分子應加 1。 4.14 上面 4.10 - 4.13 表明,若直接使用 AD 400-03-01 00:00 GMT(Z = 1867218)為起始點,則 α=INT((Z-1867218)/36524.25) 將會在 AD 1700,AD 1800 及 AD 1900 的 3 月初出現錯誤,少計算 1 個世紀。 4.15 所以應在分子加上 1.75,則 α=INT((Z-1867216.25)/36524.25),即以 AD 400-02-28 06:00 GMT(Z = 1867216.25)為起點,則 4.10 - 4.13 計算的完整格列歌里世紀的總日數與自起點時刻至有關日期間經歷日數的差額將少於 1 日(在 0 至 0.75 之間擺動)。 4.16 自 AD 400-02-28 06:00 GMT(Z = 1867216.25)起至格列歌里曆 AD 1582-10-15(Z = 2299161)經歷 431944.75 日,共 11.826246 格列歌里世紀,即共 11 個完整的格列歌里世紀,α = 11,每世紀減 1 日(共減 11 日),但每第 4 個世紀又不減,即加回 INT(α/4) = 2 日,故 1+α-INT(α/4) = 10。即格列歌里曆 AD 1582-10-15 當日的曆法調整數 A = Z + 10。 4.17 自 AD 400-02-28 06:00 GMT(Z = 1867216.25)起至格列歌里曆 AD 1600-03-01(Z = 2305508)經歷 438291.75 日,共 12.000021 格列歌里世紀,即共 12 個完整的格列歌里世紀,α = 12,每世紀減 1 日(共減 12 日),但每第 4 個世紀又不減,即加回 INT(α/4) = 3 日,故 1+α-INT(α/4) = 10。即格列歌里曆 AD 1600-03-01 當日的曆法調整數 A = Z + 10。 4.18 自 AD 400-02-28 06:00 GMT(Z = 1867216.25)起至格列歌里曆 AD 1700-02-28(Z = 2342031)經歷 474814.75 日,共 12.999986 格列歌里世紀,即共 12 個完整的格列歌里世紀,α = 12,每世紀減 1 日(共減 12 日),但每第 4 個世紀又不減,即加回 INT(α/4) = 3 日,故 1+α-INT(α/4) = 10。即格列歌里曆 AD 1700-02-28 當日的曆法調整數 A = Z + 10。 4.19 自 AD 400-02-28 06:00 GMT(Z = 1867216.25)起至格列歌里曆 AD 1700-03-01(Z = 2342032)經歷 474815.75 日,共 13.000014 格列歌里世紀,即共 13 個完整的格列歌里世紀,α = 13,每世紀減 1 日(共減 13 日),但每第 4 個世紀又不減,即加回 INT(α/4) = 3 日,故 1+α-INT(α/4) = 11。即格列歌里曆 AD 1700-03-01 當日的曆法調整數 A = Z + 11。 4.20 自 AD 400-02-28 06:00 GMT(Z = 1867216.25)起至格列歌里曆 AD 1800-03-01(Z = 2378556)經歷 511339.75 日,共 14.000007 格列歌里世紀,即共 14 個完整的格列歌里世紀,α = 14,每世紀減 1 日(共減 14 日),但每第 4 個世紀又不減,即加回 INT(α/4) = 3 日,故 1+α-INT(α/4) = 12。即格列歌里曆 AD 1800-03-01 當日的曆法調整數 A = Z + 12。 4.21 自 AD 400-02-28 06:00 GMT(Z = 1867216.25)起至格列歌里曆 AD 1900-03-01(Z = 2415080)經歷 547863.75 日,剛好共 15 個完整的格列歌里世紀,α = 15,每世紀減 1 日(共減 15 日),但每第 4 個世紀又不減,即加回 INT(α/4) = 3 日,故 1+α-INT(α/4) = 13。即格列歌里曆 AD 1900-03-01 當日的曆法調整數 A = Z + 13。 4.22 如此類推。Z 經調整後得 A 值。注意:A 是以儒略曆為基礎計算的儒略日,在 AD 1582-10-04 或之前,A = Z;在 AD 1582-10-04 之後,則 A 以儒略曆表達的日期等同於 Z 以格列歌里曆表達的日期。 5. 以下按儒略曆的曆法原則計算。儒略曆以 4 年一潤,每 4 年為一週期,週期起始日為 3 月 1 日,平均每年為 365.25 日,4 年共 1461 日。 6. B = A + 1524 = A + 1461 + 63 = A + 一個 4 年週期的總日數 + 63。關於 63 這神奇數字的用處,見下面討論。 7. BC 4713 的 1 月及 2 月共 31 + 28 = 59 日,加上 63 後等於 122。 8. B - 122.1 = A + 1401.9 = A + 1461 - 31 - 28 - 0.1 = A 除去 BC 4713 的 1 月及 2 月的日數(因 4 年週期的起始日為 3 月 1 日)再加上一個 4 年週期的總日數再減 0.1。為何減 0.1 後面再談。 9. C = 自 BC 4713-03-01 00:00 GMT 起經歷的完整儒略年 + 4 年。 10. D = 自 BC 4713-03-01 00:00 GMT 起經歷的完整儒略年再加 4 年的總日數。 11. B - D = 自本(或上)儒略年週期起始日(即由 3 月 1 日起)開始至今的總日數 + 63 + BC 4713 的 1 月及 2 月的日數 = 自本(或上)儒略年年初(即由 1 月 1 日起)開始至今的總日數 + 63。 12. E = INT((B-D)/30.6001) = 自本(或上)儒略年年初(即由 1 月 1 日起)開始至今的完整月數 + 1。為何 +1,見下面討論。為何是 30.6001 而不是 30.6,下面再談。 13. INT(30.6E) = 自本(或上)儒略年年初(即由 1 月 1 日起)開始至今的完整月數再加 1 個月的總日數。此處可用 30.6 而無須用 30.6001。 14. d = B - D - INT(30.6E) + F = 自本月初至今的日數。 15. 如 E < 14,則 E = 自本儒略年年初(即由 1 月 1 日起)開始至今的完整月數 + 1,故 m = E - 1;而 C - 4 = 自 BC 4713-01-01 00:00 GMT 起經歷的完整儒略年,故 y = C - 4 - 4713 + 1 = C - 4716。最後的 +1 是因為 BC 1 之後是 AD 1 而沒有 AD 0,即沒有公元 0 年,故 -4713 其實是多減了 1 年,需要補回。 16. 如 E > 13,則 E = 自上儒略年年初(即由 1 月 1 日起)開始至今的完整月數 + 1,故 m = E – 1 – 12;而 C – 4 = 自 BC 4713-01-01 00:00 GMT 起經歷的完整儒略年 – 1 年,故 y = C – 4 + 1 – 4713 + 1 = C – 4715。
17. 神奇數字 63 的用處及月數 + 1 的原因:
月 日數 總日數 月數+1 x30.6 取整數 減截上月底的總日數
1 31 31
2 28 59
3 31 90 4 122.4 122 63
4 30 120 5 153.0 153 63
5 31 151 6 183.6 183 63
6 30 181 7 214.2 214 63
7 31 212 8 244.8 224 63
8 31 243 9 275.4 275 63
9 30 273 10 306.0 306 63
10 31 304 11 336.6 336 63
11 30 334 12 367.2 367 63
12 31 365 13 397.8 397 63
+1 31 396 14 428.4 428 63
+2 15 459.0 459 63即(本月月數 + 1)乘以 30.6 後取整數再減 63,即為截至上月底的總日數,但本月月數須從 3 月開始,1 月及 2 月須作上年的第 13 及第 14 月計算。
18. B – 122.1 是用來計算完整儒略年時的參數。因儒略年平均為 365.25 日,故每 4 年為一週期,若只取 B – 122,則每潤年的 2 月 29 日便剛好除盡,往後計算 B-D 時,只會剩下 31+28+63=122 日,但 122 根本較上表中 3 月所對應的數字 122.4 為少,表示正確的月份數比 3 月還少(確實應為 2 月)。但上表應用只適用於月份數為 3 月或以上。故取 B-122-0.1,使計算得出的完整儒略年減少 1 年,則往後計算的月份數便增加 12,變成 14 月(即 2 月),才能應用上表。
19. 計算 E 時,如分母是 30.6,則當 B-D 為 153 或 306 或 459 時,便剛好除盡(見上表),往後計算 B-D-INT(30.6E) 時便得 0 日。故輕微增大分母至 30.6001,則當 B-D 為 153 或 306 或 459 時,便剛好不足夠除盡,E 值減少,然後計算 B-D-INT(30.6E) 的值才有意義。其實亦可輕微減少分子,用 E = INT((B-D-0.1)/30.6) 代替 E = INT((B-D)/30.6001),效果相同。
Log in to reply.