|
|
發表於 2008-1-5 18:01:52
|
顯示全部樓層
公式都有其適用範圍。這個公式在1900年以前(含),及2101年以後(含),必須經過修正才會正確。比如1900年的元旦,查萬年曆是甲戌日,干支序數11。代入公式得 (1900-1900) * 5 + (1900-1900+3)/ 4 + 9 +1 =0+0+9+1=10 (取高斯整數) 為癸酉日,少了一天。2101年後的問題則是因為沒有考慮到閏年的微調。陽曆4年一閏,但逢百年不閏,400的倍數又閏。2100年不是閏年,所以2101年以後原公式至少多算一天,理由後述。
曆法首重曆元。1900年元旦就是這個公式的「曆元」(起點),假設西元年為Y、年初累積日數為D、閏年修正量為C,則干支序數可表為 F(Y,D,C) = (Y-1900)*5 + [(Y-1900-1)/4] + (D-1) + 11 + C
第一項為平年成份造成的元旦干支序數推移。平年有365天,365/60甲子餘5,所以每過一年,元旦的干支序數都會加5。(Y-1900)代表年距,年距乘以5就是干支序數的總增量。
第二項為閏年成份造成的額外增量。每四年一閏,1900年逢百不閏,離1900年最近的閏年是1904,可我們考慮的是元旦,1904年的元旦還未過閏月,因此不會造成干支序數的增加。 [年距/4]= [(1904-1900)/4]=[4/4]=1不對。綜此必須改採 [(年距-1)/4] 才能解決 (用窮舉法可歸納此趨勢),也就是[(Y-1900-1)/4],這代表從1900年元旦到Y年元旦的閏年或閏月總數(未修正)。
第三項 (D-1) 為求算日到當年元旦的日距,代表干支序數的日增量。算D時須注意該年是否為閏年,閏年的二月有29天。
第四項 11 為曆元的干支序數初始值,當其他各項皆為零時的函數值,也就是1900年1月1日的干支序數。
最後一項閏年修正量C,可以推算: 從1900年到 Y年,每過一個百年就減一,經過一個400的倍數年就再加一回來。
整理一下 :
F(Y,D,C) =(Y-1900)*5 + [(Y-1900-1)/4] + (D -1) + 11 + C
= (Y-1900)*5 + [(Y-1900-1)/4] + 10 + D+ C
= (Y-1900)*5 +[(Y-1900+3)/4] + 9 + D + C
最後一個式子就是2F樓主的公式。
知道這個原理,任何年都可以當曆元,任何人都可以有自己的公式。
曆史年代學及天文學上是以儒略週日(Julian Day簡寫JD)來計算干支和星期。曆元是西元前4713年1月1日儒略曆法的正午時。從那時刻開始JD恆不為負值,可用公式為:
干支序數 = (JD-10)/60 或(JD+50)/60之餘數 ; 星期數= (JD+1)/7之餘數。
至於從現代陽曆換算JD,有些演算法可用,例如WiKi 百科; 本版其它貼文亦有述及。Jean Meeus's Astronomical Algorithms chpater 7 專論 JD. Linux based 的計算器亦有現成公用程式可求JD.(換言之, 將來如果人手一隻google phone, 不用再記公式了)
順便一提, JD 只是個"流日"編號, 與儒略曆或現代陽曆無直接關係.
江曉原教授的Blog有專文說此 (儒略曆還是格里曆? --再談關於歷史事件日期的推算與表達)
http://blog.sina.com.cn/s/blog_485f2bc8010009wm.html
|
|