返回農曆編算法則
初稿: 2018年10月
這裡用兩個例子展示農曆編算方法,最後會探討農曆年N2033(癸丑年)的問題。
為方便起見,這裡會用朔望月數(lunation number)來標紀朔。朔望月數由布朗於1933年所創,他把1923年的第一個朔(1923年1月17日2:41 UT1)的朔望月數定為1,此後的朔的朔望月數按時間次序定為2、3、4等等。已知1923年1月17日UT正午的儒略日數是2423437,由此可推斷某個朔的朔望月數是最接近1+(JD-2423437)/29.5306的整數,其中JD是這個朔的儒略日數。
根據英國皇家航海曆書局及美國海軍天文臺編的 《2016年天象》,2016年的冬至是在12月21日UTC10:44,亦即12月21日18:44(UTC+8),所以2016年的冬至日是W2016=2016年12月21日。 又據 《2017年天象》,2017年的冬至是在12月21日UTC16:28,亦即12月22日00:28(UTC+8),所以W2017=2017年12月22日。2016年和2017年的所有合朔時刻也可從兩書查得,只是要把所有時刻從UTC轉化為UTC+8。從兩書的數據可得M-1=2016年11月29日、M11=2017年12月18日。由此算出
M11-M-1=384日,所以L=13,意味著S2017是閏歲。要找出閏月,需要知道中氣的時刻,但那兩本書只列出春分、秋分、夏至和冬至的時刻,其他中氣時刻須自己推算。我已經把這些時間算好了,可從氣朔時刻網頁查看,該網頁列出的時間全是UTC+8,不用轉換。
下表列出朔和中氣日期,朔用L然後加上朔望月數來紀。
朔 | 中 氣 |
---|---|
L1162: 2016年11月29日 | |
冬至: 2016年12月21日 | |
L1163: 2016年12月29日 | |
大寒: 2017年1月20日 | |
L1164: 2017年1月28日 | |
雨水: 2017年2月18日 | |
L1165: 2017年2月26日 | |
春分: 2017年3月20日 | |
L1166: 2017年3月28日 | |
穀雨: 2017年4月20日 | |
L1167: 2017年4月26日 | |
小滿: 2017年5月21日 | |
L1168: 2017年5月26日 | |
夏至: 2017年6月21日 | |
L1169: 2017年6月24日 | |
大暑: 2017年7月22日 | |
L1170: 2017年7月23日 | |
L1171: 2017年8月22日 | |
處暑: 2017年8月23日 | |
L1172: 2017年9月20日 | |
秋分: 2017年9月23日 | |
L1173: 2017年10月20日 | |
霜降: 2017年10月23日 | |
L1174: 2017年11月18日 | |
小雪: 2017年11月22日 | |
L1175: 2017年12月18日 | |
冬至: 2017年12月22日 |
從表中可見,L1170朔對應的農曆月是唯一一個月份不含中氣,是閏月。由此得出M0=2016年12月29日、M1=2017年1月28日、……、M6=2017年6月24日、M*6=2017年7月23日、M7=2017年8月22日、……、M11=2017年12月18日。閏月在六月之後的那個月,是閏六月。要推算丁酉年十一月後的月份,原則上應重複以上步驟計算下一歲(S2018)的農曆月,但也可以省略,原因是我們知道農曆有閏月的那一年有十三個月,現在頭十二個月已定,而閏月是閏六月,所以最後一個月必定是十二月,初一是M11之後的朔日,下一年的正月初一必是M11之後的第二個朔日。2018年的朔日可從《2018年天象》查得。下表列出丁酉年各月的編排。
農 曆 月 | 初 一 日 期 | 日 數 |
---|---|---|
正月 | 2017年1月28日 | 29 |
二月 | 2017年2月26日 | 30 |
三月 | 2017年3月28日 | 29 |
四月 | 2017年4月26日 | 30 |
五月 | 2017年5月26日 | 29 |
六月 | 2017年6月24日 | 29 |
閏六月 | 2017年7月23日 | 30 |
七月 | 2017年8月22日 | 29 |
八月 | 2017年9月20日 | 30 |
九月 | 2017年10月20日 | 29 |
十月 | 2017年11月18日 | 30 |
十一月 | 2017年12月18日 | 30 |
十二月 | 2018年1月17日 | 30 |
農曆月的日數由兩個月初一日相隔的日數算出。例如四月初一在公曆4月26日,五月初一在5月26日,由此可知4月27日是四月初二、4月28日是四月初三……5月25日是四月三十、5月26日是五月初一,所以四月有三十日,是大月。
這裡用我計算的朔和中氣時刻來編算癸丑年的農曆月,朔和中氣時刻可從氣朔時刻網頁查得。根據氣朔時刻網頁的數據,W2032=2032年12月21日、W2033=2033年12月21日、M-1=2032年12月3日、M11=2033年11月22日,由此算出M11-M-1=354日,所以L=12,S2033沒有閏月,所以其後的十一個月已定,不必理會S2033的其他中氣。癸丑年正月初一是M-1之後的第二個朔日,是2033年1月31日,二月到十月的初一是其後的九個朔日,十一月初一是M11,即2033年11月22日。十一月之後的月份就要看S2034是否有閏月,如果有而且是在正月之前,則閏月屬癸丑年。
從氣朔時刻網頁查得2034年冬至日在W2034=2034年12月22日,冬至日之前的朔日是M23=2034年12月11日。這裡用M23來紀這個朔日,因為與其相關的農曆月是從癸丑年算起的第二十三個平月。因為M23-M11=384日,所以L=13,意味著S2034是閏歲。現在要查看W2033後的中氣和朔的日期,看看閏月是否發生癸丑年。因為癸丑年的頭十一個月已定,我們只須看看W2033之後的幾個中氣和朔日就可知道閏月是不是在癸丑年。下表列出幾個中氣和朔日。
朔 | 中 氣 |
---|---|
L1372: 2033年11月22日 | |
冬至: 2033年12月21日 | |
L1373: 2033年12月22日 | |
L1374: 2034年1月20日 | 大寒: 2034年1月20日 |
雨水: 2034年2月18日 | |
L1375: 2034年2月19日 |
從表中看出L1373朔對應的農曆月份是冬至後第一個沒有中氣的月份,所以是閏月,之前的那個月是十一月,所以是閏十一月,屬癸丑年。確定了閏月後,S2034的其他月份也定了,十二月在閏十一月之後。下表列出癸丑年各月的編排。
農 曆 月 | 初 一 日 期 | 日 數 |
---|---|---|
正月 | 2033年1月31日 | 29 |
二月 | 2033年3月1日 | 30 |
三月 | 2033年3月31日 | 29 |
四月 | 2033年4月29日 | 29 |
五月 | 2033年5月28日 | 30 |
六月 | 2033年6月27日 | 29 |
七月 | 2033年7月26日 | 30 |
八月 | 2033年8月25日 | 29 |
九月 | 2033年9月23日 | 30 |
十月 | 2033年10月23日 | 30 |
十一月 | 2033年11月22日 | 30 |
閏十一月 | 2033年12月22日 | 29 |
十二月 | 2034年1月20日 | 30 |
若干人指出農曆年N2033癸丑年是異常年份,以前很多編曆者都弄錯了這年的農曆月份。但如果細看例二的計算,似乎看不出這年有何特異之處。比較例一和例二的計算,反而覺得例二的計算較為簡單。要明白癸丑年為何異常,先看看下表列出的朔和中氣的日期,其中很多日期在例二的計算中略去了。
朔 | 中 氣 | 農 曆 日 期 |
---|---|---|
L1360: 2032年12月3日 | 壬子年十一月初一 | |
冬至: 2032年12月21日 | 十一月十九 | |
L1361: 2033年1月1日 | 十二月初一 | |
大寒: 2033年1月20日 | 十二月二十 | |
L1362: 2033年1月31日 | 癸丑年正月初一 | |
雨水: 2033年2月18日 | 正月十九 | |
L1363: 2033年3月1日 | 二月初一 | |
春分: 2033年3月20日 | 二月二十 | |
L1364: 2033年3月31日 | 三月初一 | |
穀雨: 2033年4月20日 | 三月廿一 | |
L1365: 2033年4月29日 | 四月初一 | |
小滿: 2033年5月21日 | 四月廿三 | |
L1366: 2033年5月28日 | 五月初一 | |
夏至: 2033年6月21日 | 五月廿五 | |
L1367: 2033年6月27日 | 六月初一 | |
大暑: 2033年7月22日 | 六月廿六 | |
L1368: 2033年7月26日 | 七月初一 | |
處暑: 2033年8月23日 | 七月廿九 | |
L1369: 2033年8月25日 | 八月初一 | |
L1370: 2033年9月23日 | 秋分: 2033年9月23日 | 九月初一 |
L1371: 2033年10月23日 | 霜降: 2033年10月23日 | 十月初一 |
L1372: 2033年11月22日 | 小雪: 2033年11月22日 | 十一月初一 |
冬至: 2033年12月21日 | 十一月三十 | |
L1373: 2033年12月22日 | 閏十一月初一 | |
L1374: 2034年1月20日 | 大寒: 2034年1月20日 | 十二月初一 |
雨水: 2034年2月18日 | 十二月三十 | |
L1375: 2034年2月19日 | 甲寅年正月初一 | |
L1376: 2034年3月20日 | 春分: 2034年3月20日 | 二月初一 |
L1377: 2034年4月19日 | 三月初一 | |
穀雨: 2034年4月20日 | 三月初二 | |
L1378: 2034年5月18日 | 四月初一 | |
小滿: 2034年5月21日 | 四月初四 |
表中可見有三個農曆月在八個月內不含中氣:癸丑年八月、閏十一月和甲寅年正月,而且有兩個月含兩個中氣:癸丑年十一月和十二月。一個農曆月內出現兩個中氣的情況十分罕見,無中氣的月份而不是閏月(「偽閏月」)的情況也是十分罕見的。其實可以看出「雙中氣」和「偽閏月」是會在相隔幾個月內成雙出現的。很多編曆者弄錯了月份編排,是因為有不少書籍和文章說農曆月份的序數按月內的中氣而定:含雨水的月份是正月、含春分的月份是二月、含轂雨的月份是三月等,而不含中氣的月份定為閏月。問題是這三個無中氣的月全都要閏嗎?編曆者或許察覺到在八個月內置三個閏月不合理,所以把最先出現的無中氣月份,即癸丑年七月後的那個月定為閏七月,這就錯了。偽閏月在N1984(甲子年)也出現過,但在真閏月之後,所以以最先出現的無中氣月份為閏月的方法在該年沒有出錯。
以無中氣的月份定為閏月這「偽法則」雖然大多數時候不錯,但遇到偽閏月時就不靈了。至於「農曆的月序按月內所含的中氣而定」這「偽法則」在癸丑年也不靈了:癸丑年八月不含秋分、九月不含霜降、十月不含小雪、甲寅年正月不含雨水。如果遵從正確法則,癸丑年的月份安排沒有什麼奇特。如例二所示,從壬子年十一月到癸丑年十一月之間有十二個農曆月,所以S2033是平歲,沒有閏月,編排S2033的月份時不必理會中氣日期,也懶得去查,編月份時也不知道(亦無須理會)其中一個月沒有中氣。到要處理十一月以後的月份時,發現S2034是閏歲,再看頭幾個中氣日期,發現十一月之後那個月沒有中氣,所以是閏月,以後的月份也定下來了,不必看其他中氣,所以不知道(亦無須理會)後面還有一個月沒有中氣。只要遵從正確法則,不存在任何問題。
那麼這偽法則從何而來?其實這是順治二年(1645年)曆法改革前的法則。如二十四節氣網頁所述,順治二年以前的 二十四節氣用平氣來定義,一個月最多只能有一個中氣。可以推出閏歲只能有一個月不含中氣,所以偽閏月也不存生。只要把十一月定為含冬至的月份,可推出十二月必含大寒,正月必含雨水等等。所以農曆月序由月內中氣決定,而無中氣的月份定為閏月這規則在平氣法下是沒有問題的,但是改用定氣法後就會碰釘。
由定氣法所定義的二十四節氣時間間隔並不相等,一個月有可能出現兩個中氣,雖然這情況很罕見。有雙中氣就有偽閏月,所以以前的法則不能再用,於是創制了法則五取代之前的無中氣置閏法。
順治二年的曆法改革由德國傳教士湯若望制定。新曆法出現了雙中氣和偽閏月的情況,而且計算較為複雜,使當時的士大夫十分不滿。前新加波國立大學數學系教授Helmer Aslaksen(現任挪威奧斯陸大學副教授)撰寫了一篇介紹農曆的文章,他指出當時中國的天文學不一定遜於西方,甚至認為當時沒有一個西方傳教士比得上元朝天文學家郭守敬,但是當時朝廷的中國天文官都是世襲,對自己傳統的天文曆法認識不深,在曆法爭議上辯不過西方傳教士。湯若望制定的置閏法則現在仍在使用。
返回農曆編算法則