陰曆正月與置閏
古希臘雅典的天文學家Meton觀察到19個回歸年的週期幾乎剛好等於235個朔望月的週期;換算成日,取四捨五入則為6940日;這兩個週期之差僅為2小時。
中國古人也發現了這個特性,為了讓陰曆年的12個月能與太陽年並進,就必須在這19年中的某7年裏各加入一個閏月。(因一年設為12個月,19年只有228個月,比235個月少了7個月,必須設法將此7個月插入19年中,才能使陰曆年以235個朔望月為週期,與迴歸太陽年19年同步)。這種方法並不理想,因為不是真正的同步,畢竟還是差了兩小時,許多年後誤差更大。那麼中國人是用什麼方法使陰曆年始終能配合陽曆年的進行呢?
有一個說法是遵循下面兩個原則來決定正月和閏月:
1.
含雨水中氣的朔望月定為正月
2.
不含中氣的朔望月定為閏月。
但根據這兩個原則以程式算出的結果顯示了嚴重的問題,下列年度(針對1500-2500年之間)的末月均含雨水,而與次年的含雨水正月衝突,即使做了修正也無法與真實資料完全相符。
1661,1699,1813,1832,1851,1984,2033,2052,2128,2147,2166,2185,2204,2242,2318,2337,2424。
也有人說可以比較時刻法來避免這種情況,但即使用比較時刻法,還是有同樣的問題,下列年度的末月均含雨水,而與次年的含雨水正月衝突。
1680,1699,1718,2052,2071,2405,2424,2443。
第二種說法是遵行下面兩個原則:
1.
找出連續兩個冬至,看這兩個冬至所在的朔望月之間含有幾個朔望月。
2.
若含11個朔望月,則不必考慮閏月問題,若含12個朔望月,則其中必須有一個月為閏月,因兩個冬至之間只有11個中氣,此時找到第一個不含中氣的月,即可設定其為閏月。
根據這兩個原則以程式算出的結果顯示與實際資料是相符的。這種方法可保證冬至點一定含在11月中,但卻不能保證雨水點一定含在正月中。若以比較日期法計算,則下列年度的正月就沒有包含雨水日。
1662,1700,1833,1852,1985,2034,2053,2129,2148,2167,2205,2243,2319,2425。
若以比較時刻法計算,則仍有下列年度的正月不包含雨水時刻。
1700,1719,2053,2072,2425,2444。
雖然實際情況是絕大部份的年度其正月都包含了雨水,但只要有例外的,我們就不能以正月包含雨水作為設計程式的原則。
以上面的第二種方法為陰曆置閏,其程式設計步驟如下:
1. 找出指定年前一年冬至點為起點的連續16個中氣點。
2. 找出包含指定年前一年冬至日的朔望月新月點(或合朔時刻)及其後連續共16個新月點。
3.
若指定年冬至日大於或等於第13個朔望月,則此置月年(連續兩個冬至之間)必有閏月,含13個月。否則無閏月,只含12個月。
若含12個月,則直接賦予各月代碼。若含13個月,則比對各中氣日與新月日,若陰曆臘月(即12月)起始日大於冬至中氣日,且陰曆正月起始日小於或等於大寒中氣日,則此月為閏月,其餘同理。找到閏月後就不需再比對。賦予各月代碼,包含閏月,11月代碼為0,12月代碼為1,正月代碼為2,2月代碼為3,餘類推。閏月多加0.5,譬如閏6月,就以代碼7.5表示。
比較時刻法和比較日期法的差別只在於對比的是時刻還是日期。以1984年的冬至點為例,
其時刻我們以X表示,X=12月22日0時23分3秒,它附近的新月是12月22日19時46分36秒,次一新月為1985年1月21日10時28分16秒。若以比較時刻法,則X不在此兩個新月時刻之間,而是在它們之前,也就是X不滿足下列的不等式:
因此X被判定是落在前一個朔望月內。但若以比較日期法,則前述冬至點所在之日期,以Y表示,Y=1984年12月22日,Y與第一個新月點為同一日,也就是它能滿足下列的不等式:
依此定義則這兩個新月間的朔望月包含此冬至日Y,故此朔望月即為年度置月的第一個月,即11月。
歷來中國陰曆置月都是以比較日期法來制定的。雖然有人認為以比較時刻法來為陰曆置月比較精確,但古人使用比較日期法或許就是因為當時無法做到很精確的測量。而目前使用的比較日期法,只要在計算時沒有矛盾之處,就應該是可以接受的。