逐月計演算法
A. 閏月的計算方法
閏月計演算法:農歷年中月以朔望月長度29.5306日為基礎,所以大月為30日,小月為29日。為保證每月的頭一天(初一)必須是朔日,就使得大小月的安排不固定,而需要通過嚴格的觀測和計算來確定。因此,農歷中連續兩個月是大月或是小月的事是常有的,甚至還出現過如1990年三、四月是小月,七、八、九、十連續四個月是大月的罕見特例。
那麼多長時間加一個閏月呢?最好的辦法就是求出回歸年日數與朔望月的日數的最小公倍數:我們希望m個回歸年的天數與n個朔望月的天數相等,也就是應有等式:
m×365.2422=n×29.5306
在這個等式中我們不能直接求出m和n,但可以求出它們的比例:
其近似值為:
在這些分式中,分子表示回歸年的數目,分母表示朔望月的數目。例如第六個分數式 = 表示19個回歸年中必須加7個閏月。
19個回歸年中加7個閏月的結果比較:
19個回歸年=19×365.2422=6939.6018(天)
一個朔望月有29.5306天,235個朔望月=235×29.5306=6939.6910(天)
19個回歸年中加7個閏月後,矛盾消除得只差:6939.6910-6939.6018=0.0892(天)——即2小時9分多,這已經是夠精確的了。
所以,農歷就採用了19年加7個閏月的辦法,即「十九年七閏法」,把回歸年與農歷年很好地協調起來,使農歷的元旦(春節)總保持在冬末春初。古人把235個朔望月稱之為「閏周」。
農歷置閏的方法可以使農歷年的平均長度接近回歸年,而農歷中的月又有鮮明的月相特徵,保持了公歷和陰歷兩全其美的特點。
置閏的方法是兩個冬至之間,如僅有12個月則不置閏,若有13個月即置閏。置閏的月從「冬至」開始,當出現第一個沒有「中氣」的月份,這個月就是閏月,其名稱是在前個月的前面加一個「閏」字。
農歷閏哪個月?決定於一年中的二十四個節氣。
我國農歷將二十四個節氣分為十二個節氣和十二個中氣。
農歷以月亮為周期(陰歷),十二個月歷總共約有354天;再配合年歷(陽歷),年歷則是根據地球公轉所形成的四季變化而得的周期所編制。而月歷較年歷短,兩者相差了11天,因此,便要每19年加多7個閏月來填補誤差。而決定那一個月做閏月,則依24節氣而定,農歷月份通常包含一個節氣和一個中氣,如驚蟄/春分等等,若某農歷月份只有節氣而沒有中氣,歷法便會把該月作為上個月的閏月。以2006年為例,農歷七月之後正好有一個只有節氣而沒有中氣的月份,因此便置閏七月來調整誤差。
二十四節氣在農歷中的日期是逐月推遲的,於是有的農歷月份,中氣落在月末,下個月就沒有中氣。
一般每過兩年多就有一個沒有中氣的月,這正好和需要加閏月的年頭相符。所以農歷就規定把沒有中氣的那個月作為閏月。
例如2001年5月21日,農歷四月二十九日,是中氣小滿,再隔一個月後,6月21日農歷五月初一才是下一個中氣夏至,而當中這一個月(2001年5月23日——2001年6月20日)沒有中氣,就定為閏月。因為它跟在四月後面,所以叫閏四月。