返回農曆編算法則


農 曆 編 算 例 子

初稿: 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是這個朔的儒略日數。


例 一: 推 算 N2017 (丁 酉 年) 的 所 有 農 曆 月

根據英國皇家航海曆書局及美國海軍天文臺編的 《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日是五月初一,所以四月有三十日,是大月。


例 二: 推 算 N2033 (癸 丑 年) 的 所 有 農 曆 月

這裡用我計算的朔和中氣時刻來編算癸丑年的農曆月,朔和中氣時刻可從氣朔時刻網頁查得。根據氣朔時刻網頁的數據,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 (癸 丑 年)

若干人指出農曆年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(現任挪威奧斯陸大學副教授)撰寫了一篇介紹農曆的文章,他指出當時中國的天文學不一定遜於西方,甚至認為當時沒有一個西方傳教士比得上元朝天文學家郭守敬,但是當時朝廷的中國天文官都是世襲,對自己傳統的天文曆法認識不深,在曆法爭議上辯不過西方傳教士。湯若望制定的置閏法則現在仍在使用。


返回農曆編算法則