初稿: 2018年10月 最近一次重大修訂: 2022年4月17日
本網站的農曆涵蓋年份是公元前722年至公元2200年,可分為七個時段:現代(1912年–2200年)、清朝(1645年–1911年)、西漢中葉至明末(前104年–1644年)、南明及明鄭(1645–1683)、秦至漢初(前221年–前104年)、戰國時代(前480年–前222年)及春秋時代(前722年–前481年)。每時段採用不同的方法計算農曆,以下七節簡單介紹這些計算方法。
下面用Ny表示年首最接近公曆1月1日的中曆年。例如N150指漢桓帝和平元年,始於公元150年2月15日,終於151年2月3日。
內容
這時段的農曆根據《農曆的編算和頒行》文件国标(編號GB/T 33661-2017)規定的方法編算(詳情可參閱農曆法則網頁),計算結果與中國科學院紫金山天文臺出版的書籍裡的農曆資料核對過。太陽和月球的地心位置用美國噴射推進實驗室(Jet Propulsion Laboratory)編制的DE431DE431曆表計算。註一 噴射推進實驗室的DE系列曆表用數值積分方法計算太陽系行星及月球的位置,是目前世界上最準確的曆表之一,計算時考慮到343個質量比較大的小行星對大行星的重力攝動。太陽系各天體的運動計及廣義相對論對牛頓力學的修正,廣義相對論的效應以參數化後牛頓n體度規推出的動力學方程描述。此外還計及地球、月球、及太陽因偏離完美球狀而引起的額外加速度。用DE431曆表計算出的地心位置經過光行時及光行差的修正後,得到的是國際天球參考系(ICRS)的地心座標視位置,再經過參考架偏差矩陣(frame bias matrix)以及歲差和章動的變換後算出地心視位置相對於瞬時黃道及真春分點的黃道座標。歲差採用Vondrák等人於2011年建立的歲差模型Vondrák計算。章動根據國際天文聯會推薦的IAU2000A章動模型計算,計算公式取自國際地球自轉和參考系服務規範(IERS Conventions)在2010年發佈的文件IERS10和美國海軍天文臺在2005年發佈的文件Kaplan。月相和節氣的質心力學時(TDB)時刻用牛顿-拉弗森(Newton-Raphson)求根法計算,所得的TDB時刻再轉換成UTC+8(1972年及以後)或UT1+8(1972年前)時刻。換算過程中省略了TDB到地球時(TT)的轉換,因為兩者差異小於0.002秒,可視為等同。TT到UT1的轉換公式取自Stephenson等人(2016)及Morrison等人(2021)的擬合公式SM16,1972年到現在的TT-UTC根據正式公佈的閏秒計算,2024年後的TT-UTC根據Stephenson等人(2016)及Morrison等人(2021)的外推公式計算,其實他們的公式是用來預推TT-UT1的,但是也可用來作TT-UTC的近似值,因為根據規定UTC和UT1相差不會超過0.9秒。我已把本網站編算農曆時詳細的數學計算寫在這pdf文件供有興趣的讀者參閱。
本網站以前用國際天文聯會推薦的IAU2006模型計算歲差,現在改用Vondrák等人的歲差模型,原因是IAU2006模型只適用於公元2000年前後一千年左右,以前本網站載的農曆年限是公元1841年至2200年,用IAU2006模型沒有問題。現在本網站的農曆年限是公元前722年至公元2200年,雖然古代的農曆根據實曆,但是年曆網頁仍載有用現代方法計算當時合朔和二十四節氣的UT1+8時刻以供參考,因此IAU2006模型便有所不足。Vondrák等人的新歲差模型有效年限是公元2000年前後二十萬年,我比較過用Vondrák等人的模型和IAU2006模型計算出的月相和二十四節氣的時刻,發現在1600年至2500年間,兩歲差模型的二十四節氣時刻偏差不超過0.19秒、月相時刻偏差不超過0.00038秒,因此IAU2006模型與Vondrák等人的新模型在這時段可視為等同。
用以上方法編算的農曆與兩本曆書比對過,一本是中國科學院紫金山天文臺編的《新编万年历(修定本)》新编万年历,另一本是劉寶琳編的《100年袖珍干支月曆》劉寶琳。《100年袖珍干支月曆》的編者劉寶琳曾是紫金山天文臺的研究員,編該書時已從事曆算工作近四十年,並曾以紫金山天文臺的名義出版了多種曆書,《新编万年历》也是由他主編的。《新编万年历》的年限是從1840年(道光二十年)到2050年,《100年袖珍干支月曆》的年限是從1911年到2010年。兩本書的農曆資料是一致的,只是《100年袖珍干支月曆》還把朔、望和二十四節氣的時刻列出到分鐘。兩本書中1912年到1928年的農曆根據北洋政府教育部中央觀象臺編的《中華民國曆書》,1929年到1948年的農曆根據中華民國中央研究院天文研究所編的《國民曆》註二,1949年及以後的農曆則根據紫金山天文臺編算的農曆。
本網站編算的這時段農曆與兩本書所載的資料大多一致,遇到農曆初一的日期不一致時就以兩本書的資料為準。不一致的情況有三次而且都是發生在1929年以前。在這些不一致的情況,合朔的時刻仍然用我的計算,只是農曆初一的日期改了。除了朔日的日期有差異外,二十四節氣的日期有時也有差異。除了一項外,所有的差異也都是發生在1929年以前。下表把所有的合朔和二十四節氣的日期差異列出來。
農 曆 年 | 農 曆 月 | 初 一 的 公 曆 日 期* | 合 朔 時 刻 (UT1+8) |
---|---|---|---|
N1914 癸 丑 年 | 十 月 | 1914年11月17日 | 1914年11月18日 00:02 |
N1916 丙 辰 年 | 正 月 | 1916年2月3日 | 1916年2月4日 00:05 |
N1920 庚 申 年 | 十 月 | 1920年11月10日 | 1920年11月11日 00:05 |
* 初一的日期根據當時政府頒行的日曆。
公 曆 年 | 節 氣 | 本網站計算的節氣時刻(UT1+8) | 當時政府頒行的日曆 |
---|---|---|---|
1912 | 小雪 | 11月22日 23:48 | 11月23日 00:39 |
1913 | 秋分 | 9月23日 23:53 | 9月24日 00:48 |
1917 | 大雪 | 12月8日 00:01 | 12月7日 23:47 |
1927 | 白露 | 9月9日 00:05 | 9月8日 23:52 |
1928 | 夏至 | 6月22日 00:06 | 6月21日 23:53 |
1979 | 大寒 | 1月20日 23:59:54 | 1月21日 00:00 |
1914年以前的差異主要是因為當時的計算方法根據乾隆七年(1742年)編成的《曆象考成後編》,《曆象考成後編》成書時還算先進(見下一節),現在看來是很不準的,而且當時用北京地方視時。用《曆象考成後編》推算的時刻可以有幾分鐘至幾十多分鐘的誤差。自1914年起曆法計算採用國外新方法,改北京地方視時為北京地方平時(UT+7:46),與東經120°地方平時有十四分鐘偏差,這就是1914年、1916年、1917年、1920年、1927年和1928年出現日期差異的原因,1929年起改用東經120°平時(UT+8)(UTC要到1960年代才創立)後鮮有差異。至於1979年的情況比較特殊,我據DE431曆表推算的大寒時刻在1月21日零時之前六秒,《100年袖珍干支月曆》和《一九七九年中国天文年历》載的時刻是00:00(用《一九七九年中国天文年历》的太陽表數據算出的時刻是00:00:12),可見大寒時刻非常接近午夜零時,要用很準確的曆表才能把確實日期算出。1984年以前,世界上大多數的天文年曆(包括紫金山天文臺編的《中国天文年历 》)是根據1895年美國天文學家西蒙‧紐康(Simon Newcomb)編的太陽表計算太陽位置,紐康太陽表的精確度約為1",所以用其計算的二十四節氣時刻可以有25秒的誤差。《100年袖珍干支月曆》的節氣計算可能也是用類似精度的太陽曆表計算,因為書中所列的節氣時刻和我推算的時刻常有一分鐘偏差,而這樣的偏差不見於紫金山天文臺編的《2015年中国天文年历 》,其實這也不奇怪,因為《2015年中国天文年历 》用DE421曆表計算太陽位置,DE421和DE431在近幾十年的差異十分微少。不管怎樣,這些二十四節氣的日期雖然相差一天,但是並沒有影響農曆月份的編排,我在本網站相關的網頁用紅色字形指出了這些差異。
農曆法則網頁提到數十年後的合朔和二十四節氣的UTC+8時刻現在暫時不能準確計算,有若干合朔和節氣的預推時刻接近午夜零時,所以確實日期可能和預推日期有一日之差。合朔日期可能有一日之差即意味著預推的農曆初一日可能有一日之差。至於二十四節氣的情況比較簡單,因為節氣有一日之差完全不影響農曆月份的編排,中氣有一日之差也大多無礙,除非初一日恰好發生在這個中氣的一兩日內,這種特殊情況如果出現或會影響閏月及其他月份次序。我的計算顯示這種特殊情況直到2200年也不會發生。下表列出2050年後預推時刻接近午夜零時的合朔和二十四節氣,因此確實日期或會和預推日期有一日之差。這些情況在本網站的相關網頁用紅色字形註明。
公 曆 年 | 合朔的預推時刻(UTC+8) |
---|---|
2057 | 9月29日 00:00:40 |
2089 | 9月4日 23:59:11 |
2097 | 8月8日 00:02 |
2115 | 2月24日 23:59 |
2116 | 5月12日 23:59 |
2133 | 9月29日 00:02 |
2165 | 12月4日 00:00:29 |
2172 | 10月18日 00:01 |
公 曆 年 | 節 氣 | 預 推 時 刻 (UTC+8) |
---|---|---|
2051 | 春 分 | 3月20日 23:59:19 |
2083 | 立 春 | 2月3日 23:59:27 |
2084 | 春 分 | 3月20日 00:00:35 |
2114 | 小 雪 | 11月22日 23:58 |
2142 | 白 露 | 9月8日 00:00:11 |
2155 | 霜 降 | 10月23日 23:58 |
2157 | 冬 至 | 12月21日 23:59 |
2183 | 春 分 | 3月20日 23:59:46 |
2186 | 立 春 | 2月4日 00:02 |
清朝曆法的編算法則和現在的基本上一致,只是時間用北京的地方真太陽時,而不是東經120°區時(即UT1+8)。本網站對這時段的曆日先用現代方法編算,然後與實曆核對把不一致的曆日改正。曆日資料是根據《新编万年历》新编万年历和《三千五百年历日天象》張培瑜97。《新编万年历》在1912年前的日曆根據北京故宮博物院收藏的《大清時憲書》,但是該書只載有1840年後的農曆。《三千五百年历日天象》裡的農曆資料是作者張培瑜根據史載古代曆法的編算法則復原當時曆法,並與存世的曆日資料核對過,書中前言說近400多年的曆書根本上完整地保存了,所以書中至少在明朝中葉以後的曆日應是大部份符合當時頒行的日曆,而我也檢查過書中至少在1840年至1911年的曆日資料與《新编万年历》一致。
比較實曆與用現代方法編算的農曆,發現這時段有二百多處不一致。雖然要作二百多項修改,總好過把資料用手一一輸入。造成這些差異原因除了是所用的時間不同外,還與當時的計算方法不夠準確有關。
2020-12-12 更新: 造了時憲曆日月位置及節氣和月相時刻的在線工具,或可供研究清朝天文學史的學者參考。
清朝的曆法基本上用明末制定的《崇禎曆書》。明朝末年,欽天監推算的日月食有三次與實際天象相差頗大,崇禎皇帝接納改曆建議,命徐光啟組織曆局研究改曆。徐光啟主張採用歐州傳教士傳入的西方天文學計算曆法,曆局先後聘請耶穌會義大利傳教士龍華民(Nicholas Longobardi)、德國傳教士鄧玉函(Johann Schreck)、義大利傳教士羅雅谷(Giacomo Rho)、德國傳教士湯若望(Johann Adam Schall von Bell)等人參與改曆工作,五年後於崇禎七年十一月編譯成一百三十七卷的《崇禎曆書》。由於遭到守舊派的阻撓,新曆法遲遲未有實行。在《明史‧曆志》中記錄了發生過八次中西天文學的較量,包括日食、月食、木星、水星、火星的運動,結果是西法以八比零擊敗中法大獲全勝。崇禎帝深知西法之密,於崇禎十六年(1643年)八月下定頒布新曆的決心,但頒行《崇禎曆書》的命令還沒有實施,明朝就已滅亡。
順治元年(1644年)五月滿清入關後,攝政王多爾袞聽說西洋新曆法精湛,召湯若望入朝問新法之事,不久決定採用。湯若望將《崇禎曆書》刪改壓縮成一百零三卷,更名為《西洋新法曆書》。順治二年(公元1645年),清政府正式頒行依新曆法編算的《時憲曆》。新曆法採用定氣法計算二十四節氣,打破了二千多年來一直沿用的平氣法。日月五星的計算採用第谷‧布拉赫(Tycho Brahe)的系統。
康熙五年(1666年) 康熙六年(1667)至八年(1669年)因曆獄而復用明朝《大統曆》,二十四節氣改回平氣。清朝曆算家汪曰楨在其《歷代長術輯要》說清欽天監編的《御定萬年書》(乾隆年間編成,後來多次續修延長年限)在這幾年的二十四節氣日期仍用定氣,係後來以新法追改之故。鄭鶴聲《近世中西史日對照表》鄭鶴聲的二十四節氣日期採用《萬年書》的數據,所以也與實曆不符,查張培瑜《三千五百年历日天象》也發現其二十四節氣日期是定氣,亦與《近世中西史日對照表》的資料一致。本網站在這幾年提供兩套曆書節氣:其一取《三千五百年历日天象》的數據,此乃根據西洋新法追推的定氣;另一套曆書節氣根據《大統曆》推算。至於朔日,依明朝《大統曆》和依《西洋新法曆書》計算結果在這幾年的日期完全一致,只是由於節氣日期的差異使康熙八年和九年的置閏出現分歧:依《大統曆》康熙八年閏十二月,依《西洋新法曆書》則在康熙九年閏二月。這情況史書也有記載:康熙八年三月,比利時傳教士南懷仁(Ferdinand Verbiest)受任欽天監監副治理曆法,指出按舊法推出的閏十二月不妥,按新法置閏當在明年二月。康熙帝命禮部詳查此事,欽天監官員多支持南懷仁,於是下詔「罷康熙八年十二月閏、移置康熙九年二月。其節氣占候、悉從南懷仁之言」(《康熙朝實錄‧卷二十七》)。由此可知《大清康熙八年歲次己酉時憲曆》有兩個版本,一是以舊法推算,一是以西洋新法推算。
2024年5月更新: 臺灣國立故宮博物院的清代檔案檢索系統藏有若干康熙初年的《大清七政經緯躔度時憲曆》,其中康熙五年所載的節氣日期和時刻符合《西洋新法曆書》的推步,康熙六年至八年則符合大統曆的推步。
《西洋新法曆書》中有圖與表不合的情況,而且有很多隱晦難曉之處。清政府於康熙五十三年(1714年)開始修訂《西洋新法曆書》,在康熙六十一年(1722年)完成了《欽若曆書》,雍正年間更名為《曆象考成》。此書以康熙帝的名義御製,康熙帝有意擺脫傳教士對曆算的控制,在暢春園蒙養齋創建了算學館,招攬人才研習西方的數學和天文學及編撰書籍,《曆象考成》就有很多中國學者參與編寫,書中也加入了一些中國學者的研究成果。《曆象考成》成書後,算學館裡的中國學者認為他們已掌握了西方的天文曆算,開始挑戰傳教士對曆算的領導地位,有人提出欽天監不應再由西洋人把持。其實他們對當時西方天文學的進展一無所知,《曆象考成》仍然沿襲第谷的體系,不但已落後於當時西方的天文學,而且因年代日久而誤差漸大。雍正八年(1730年)六月初一發生日食,這是《曆象考成》成書後首次在京師可見的日食。欽天監監正戴進賢(Ignatius Kögler)和監副徐懋德(Andreas Pereira)為了顯示他們的曆算權威仍無可取代,趁這次日食指出《曆象考成》的預報與觀測有微小偏差,欽天監滿洲監正明圖上奏說若不及時修理曆法恐愈久愈差。於是戴進賢和徐懋德奉命修訂曆法,他們根據法國天文學家喬凡尼‧卡西尼(Giovanni Cassini)及德國傳教士格拉馬迪庫思(Nicasius Grammaticus)的計算方法和數據製定了一份日躔、月離表,即太陽和月球運動表。他們把表格附在《曆象考成》諸表之末,既沒有說明製表之依據,也不說明使用方法,欽天監中只有戴進賢、徐懋德及(食員外郎俸五官正)蒙古人明安圖三人懂得使用新表,情況很不尋常。唯恐曆法久而失傳,協辨吏部尚書顧琮於乾隆二年奏請增補圖說,於是清政府組織人員重修《曆象考成》,於乾隆七年(1742年)編成《曆象考成後編》。書中摒棄了第谷體系,引進開普勒第一和第二定律,不過橢圓的焦點是地球而不是太陽,這在具體計算上得出的結果是相同的。月球的運動源自牛頓的月亮模型,這模型結合了開普勒定律、英國天文學家霍羅斯(Jeremiah Horrocks)的橢圓心轉動模型和牛頓用其萬有引力理論推出的若干修正項。Cook, Kollerstrom
由於用第谷體系計算的曆法不夠準確,二十四節氣的日期和用現代計算的常有差異,所以在年曆網頁裡在清初仍然列出曆書節氣的日期,即按當時《時憲曆》計算的日期。改用開普勒定理計算曆法後,節氣日期差異大大減小,因此在1733年後除了那些曆書節氣與現代計算有差異外,其餘略去不註。至於合朔,朔日就是每月的初一日,本網站的古代農曆日期全部依當時的曆法,不用另外註明曆書朔日。
《時憲曆》打破傳統用定氣法計算二十四節氣後,置閏法則出現了一些問題,以前一直沿用的無中氣置閏法不能再用,因為在一歲內可能會出現兩個無中氣的月份。明末曆局在研究曆改時已注意到這個問題,當時的曆局官員李天經主張按中氣時刻在合朔時刻先後來決定其所屬之月份。如果有中氣和合朔發生在同一日,根據傳統中氣屬於這個月的初一日,但李天經主張要考慮中氣的時刻在合朔時刻之前還是之後,如果在合朔之後,則屬這個月,如果在合朔之前,則屬前一個月。這新法則能應付幾乎所有因採用定氣法而出現的置閏問題。順治二年(1645年)首次用新法編曆,《順治二年歲次乙酉時憲曆》所載的中氣大暑出現在閏六月初一,違反了閏月不含中氣的規定。汪曰楨在其《歷代長術輯要》解釋說雖然大暑與朔發生在同一日,大暑的時刻早於合朔時刻,屬於前月之中氣,所以閏六月不含中氣。這與李天經的說法一致。但是這新法則只在順治二年用過,以後不再使用。比較順治二年以及以後的閏月安排,顯示當時還沒有完全確立對於採用定氣後的置閏法則。《清史稿》明確說明時憲曆最終採用的置閏法則:「求閏月,以前後兩年有冬至之月為準。中積十三月者,以無中氣之月,從前月置閏。一歲中兩無中氣者,置在前無中氣之月為閏。」註四這就是農曆法則網頁所列的法則五。不取李天經之法,可能是因為傳統的無中氣法已能處理大多數的閏月。平歲有無中氣之月或閏歲有兩無中氣之月畢竟罕見,只須稍修改無中氣法便可解決問題。如果用李天經之法,就會出現順治二年的情況,即把本來無中氣法能處理的情況也改得不合傳統。採用定氣法計算二十四節氣已使守舊派十分不滿曉庵新法,如果再用李天經之法必然會引起更多爭議。
在這一千七百多年間,在中國行用的曆法多達四十部以上,計算方法和現代的大有不同,如果要一一追尋各曆法的計算方法然後核對計算結果就會很費時,所以本網站直接採用《三千五百年历日天象》張培瑜97的數據。核對資料時發現該書在這段期間有四十多處錯誤,其中大部分已被寿星天文历的創始人許劍偉指出,現將已發現的錯誤在此網頁列出。此外,《三千五百年历日天象》在漢武帝太初元年(公元前104年)至漢章帝建初九年(84年)間列出的二十四節氣按《漢書‧律曆志》的次序,即驚蟄在雨水之前、穀雨在清明之前;在建初九年之後則按《淮南子‧天文訓》的次序,即和現在通行的次序一致。《淮南子》成書於公元前139年(漢武帝建元三年)左右,《漢書》則書於公元90年左右(漢和帝年間),可見二十四節氣的次序在東漢時還沒有完全確定。為了避免混淆,本網站不跟從《三千五百年历日天象》,二十四節氣一律按《淮南子‧天文訓》的次序。
本網站從漢武帝太初元年(公元前104年)五月起用《三千五百年历日天象》的數據,五月前用一套漢初曆法的復原法計算(見第5節)。
從漢武帝太初元年至明末這一千七百多年間,有幾件事值得注意:
發生了四次改正朔事件:
從漢武帝太初元年至明末這一千七百多年間,中國有時處於分裂局面,有多個政權並存,行用的曆法也不盡相同。我花了一些時間涉獵了其中二十部古代曆法,成功計算了665年以前以及822至892年和1281年至1644年的日曆,619年以前的日曆幾乎完全符合《三千五百年历日天象》的數據,619-665、822-892和1281-1644年的日曆也大部份和《三千五百年历日天象》一致。撐握了這些曆法的推步後就著手編製分裂時代諸國的日曆。
《三千五百年历日天象》附表2到附表4載有分裂時代諸國的朔閏異同表,書中前言說附表的數據參照清朝曆算家汪曰楨編的《歷代長術輯要》。為了方便核對我的推步結果,我用計算機編製了依該書附表格式的三國及南北朝時期的朔閏異同表,發現我的推步結果只有幾處與該書的附表不合。其中有三例是該書的附表與正文的數據不合,我的推步符合正文。由於我不是歷史學專家,無從判斷孰是孰非,所以只註明這些矛盾的資料。對於其餘幾處差異,我比較了台灣中央研究院的兩千年中西曆轉換網站和汪曰楨編的《歷代長術輯要》,有四處這些資料和《三千五百年历日天象》一致,於是就修改我的數據,但有四處《三千五百年历日天象》的數據與《歷代長術輯要》或兩千年中西曆轉換網站不一致,所以不取該書的數據。
我本來也想自行編算遼金元三朝的日曆,但是遇到了困難。遼初用後晉司天監馬重績的《調元曆》,遼聖宗統和十二年(994年)改用賈俊的《大明曆》,到金天會十五年(1137年)改用司天楊級的《大明曆》,金大定廿二年(1182年)又用趙知微的《重修大明曆》。《調元曆》和賈俊的《大明曆》已失傳,元朝史官修《遼史‧曆象志》時不知賈俊《大明曆》的內容,竟然說是幾百年前祖沖之的《大明曆》,然後轉抄了《宋書》所載祖沖之的《大明曆》!對於這兩部已失傳的曆法,汪曰楨用他認為相近的曆法替代。《歷代長術輯要》以《宣明曆》替代《調元曆》;以金趙知微的《重修大明曆》替代賈俊的《大明曆》,然後根據《遼史》調整閏月。查看《三千五百年历日天象》附表4的宋遼金元朔閏異同表,發現這時期南北兩朝的曆日差異不大。與其效法汪曰楨先用他曆計算然後調整曆日,不如直接採用附表4的數據,結果是計算遼金元日曆的 JavaScript 程式及所需的 JSON 數據加起來比三國和南北朝的日曆計算還要簡潔。這等同於先用南朝的曆法計算然後調整曆日用於北朝,複雜的計算其實隱藏在南朝的曆法計算中。附表4沒有載遼金元曆法的二十四節氣,年曆網頁的遼金元曆書節氣須要另外計算,計算方法在宋遼金元朔閏異同表網頁表末的備註簡略敘述。
綜合分裂時代的曆法計算,年曆網頁加了三國時蜀和吳的年曆;十六國時加了後秦和北涼的年曆;南北朝時加了北魏、東魏、西魏、北齊、北周及隋朝滅陳前的隋朝年曆;五代末年和宋朝時加了遼、金、蒙古和元朝滅宋前的年曆。只要輸入分裂時代的公曆年,便有按鍵選擇分裂時代的王朝。朔閏表網頁和年號網頁也加了這些王朝的朔閏表和紀年表。
在學習明朝《大統曆》的氣朔推步時,發現了《三千五百年历日天象》、薛仲三和歐陽頤的《兩千年中西曆對照表》、陳垣的《二十史朔閏表》及汪曰楨的《歷代長術輯要》在明朝竟然至少有七個朔日錯誤,現已撰「明朝《大統曆》的定朔計算及曆表朔日訂正」詳細說明,並根據現存明朝《大統曆》曆書改正了本網站明朝的七個朔日資料。
中國的曆法在這段期間頻頻更改,公曆卻相當穩定,只有一次重大的改革,即1582年的格里高里曆改,1582年前公曆用儒略曆,凡能被四整除的年份是閏年,平年365日,閏年366日,一年的平均日數是365.25日,比回歸年長0.0078日,積128年就有一日偏差,這使春分日期在儒略曆不斷推前。復活節是西方重要的宗教節日,復活節的日期在公元325年確立,取春分月圓後的第一個星期日,但是「春分」和「月圓」不用天文學的定義,而是用近似值。計算復活節時「春分」當時定為儒略曆的3月21日,因為這是當時春分在儒略曆的近似日期,「月圓」則定為教會曆(ecclesiastical calendar)某月的第十四日。教會曆是一種陰陽曆,曆法的朔望依默冬章(Metonic cycle)計算,即假設235個朔望月等同於19個回歸年,這也是中國古代十九年七閏法的依據。但是235個朔望月(6939.688日)比19個回歸年(6939.6075日)長0.08日,積久漸差。曆法之回歸年及朔望月偏差使春分日期在儒略曆的日期不斷提前,天文學上月圓之日亦漸漸偏離曆法的月圓日。到了十六世紀末,春分日期已移到3月11日,望日也比曆法推算的月圓日早了四日,曆法「失天」的情況引起學者對復活節計算方法的爭議,並要求改曆。於是教皇格里高里十三世在1582年宣佈改曆,把當年10月4日之下一日定為10月15日,跳了十日使春分的日期回到3月21日,並規定在四百年中減去三個閏年,具體方法是凡公曆年是4的倍數但不是100的倍數(例如2016年)都是閏年,如果公曆年是100的倍數但不是400的倍數(例如1900年)就不閏,如果公曆年是400的倍數(例如2000年)則閏。這就是現在行用的格里高里曆,其一年平均日數是365.2425日,頗接近回歸年的數值365.2422日,積3300年才有一日偏差。曆改也修改了朔望的計算,使算出的朔望日在較長時間內不偏離真實的朔望日。然而只有義大利、西班牙、葡萄牙、法國、波蘭、低地國家及這些國家的殖民地在1582年遵從教皇指示改用新曆,基督新教及東正教等國家起初抵制新曆,後來陸逐採用。希臘於1923年才改用格里曆,是最遲採用新曆的歐洲國家。雖然西方國家並不是都在1582年改用格里曆,這裡遵從慣例在1582年10月15日起改用格里曆紀日。註三
儒略曆是羅馬共和國獨裁官儒略‧凱撒(Julius Ceasar)採納埃及亞歷山大的希臘天文學家索西琴尼(Sosigenes of Alexandria)計算的曆法,在公元前45年1月1日正式使用。凱撒不久被殺,而儒略曆在最初36年執行上出現了置閏錯誤,本來應該每四年一閏卻變成每三年一閏,到了公元前8年才決定糾正錯誤。由於已多閏了三次,於是在其後十二年間停閏三次,到公元8年才恢復正常的閏年。
近代學者陳垣在其著作《二十史朔閏表》和《中西回史日曆》在公元元年開始註有公曆日期,採用古羅馬曆法,公元4年停閏,因此公元元年至3年的日期與現行各國曆表都相差一日。上面提到的兩千年中西曆轉換網站也是在公元4年停閏。張培瑜對這做法不以為然,他在《三千五百年历日天象》前言指出公曆紀年不是古羅馬人在公元元年所創,而是後人在六世紀時創立的,對之前的紀年全部用逆推。西方各國的古代曆法也是十分混亂,創立公曆紀年紀日的目的就是為了將各國曆法轉換成統一的紀日系統以方便研究歷史,所以不應該將古羅馬曆的混亂情況帶到公曆。我贊同張培瑜的見解,本網站的公曆在公元8年以前也是用逆推的儒略曆(proleptic Julian calendar),不考慮古羅馬曆的置閏錯誤,也不考慮2月和8月的日數可能更改過。這也是現代西方學者一般採用的紀年紀日法。
公曆月名的英文是January, February, March, April, May, June, July, August, September, October, November和December,中文一般意譯為1月、2月……12月等,但是從January到August的八個月名其實和月序無關,September至December則是七月、八月、九月和十月的意思,這是因為古羅馬曆本來以March作為一年的起始月,十二個月中只有前十個月有月名: March, April, May, June, Quintilis, Sextilis, September, October, November 和 December,最後兩個月沒有月名。March, April, May, June來自戰神瑪爾斯(Mars)、花開之月(又一說是來自美麗女神阿佛洛狄忒Aphrodite)、女神瑪雅(Maia)及女神朱諾(Juno),Quintilis至December是五月至十月,後來最後兩個月得名January(守護神雅努斯Janus)和February(源自古代淨化心靈及懺悔的節日)。約公元前八世紀與前二世紀之間,羅馬曆的起始月由March改為January。公元前45年的儒略曆改並沒有更改月序,但是為了紀念儒略‧凱撒(Julius Ceasar)和羅馬帝國開國君主奧古斯都‧凱撒(Augustus Ceasar),將其中兩個月份改用他們的名字:公元前44年Quintilis更名為July(儒略月)、前8年Sextilis更名為August(奧古斯都月),變成了今天的月名。
雖然January第一日在羅馬曆很早就定為一年之始,但是某些歐洲國家雖然後來也採用儒略曆或格里曆,可能因各地傳統不同他們以前不一定取January首日為年首。例如某國家以前可能以March的第一日作為年首,另一國家以前或以March的第25日(接近春分日)為年首,又另一國以前或以December的第25日(接近冬至)為年首等。史學家有時會用雙重紀年紀日來記事,例如"10/20 February 1661/62"表示日期是February的第十日(儒略曆)或February的第二十日(格里曆),年份是1661年或1662年,視乎用何日為年首。這情況類似中國的分裂時代,各政權各自頒曆,因此年首和日期也不盡相同。所以用統一的紀年紀日對研究歷史很有用,本網站的公曆依慣例一律以January第一日為年首,月份的英文名一律用現在通行的月名,中文一律譯為1月、2月、3月……12月,為避免混淆,這裡的公曆月名用阿拉伯數字,中曆月名則用漢字。如前述,1582年10月15日起用格里曆,公元8年至1582年10月4日用儒略曆,8年前則用逆推儒略曆(proleptic Julian calendar)。
據說很多華人以西方月名來譯農曆的月名,例如以June來譯農曆六月,使一些西方人士感到困惑,不知道是在說公曆的月份還是農曆的月份。這樣的譯法,就像用「正月」來譯公曆的January、「冬月」譯November、「臘月」譯December等,並不足取,所以本網站不採用這拙劣譯法。
南明及明鄭的曆日根據傅以禮《殘明大統曆》(收錄在《二十五史補编》中)的資料,但是永曆二十五年正月朔根據明鄭頒行的永曆二十五年大統曆訂正、永曆三十年曆書冬至日期根據明鄭頒行的永曆三十年大統曆訂正。在年曆網頁輸入1645年至1661年的年份便會有按鍵選擇南明的日曆、輸入1662年至1683年的年份便會有按鍵選擇明鄭的日曆。朔閏表網頁將明朝與南明及明鄭的朔閏表放在同一網頁,另有網頁載有清與南明及明鄭朔閏異同表。
南明及明鄭的曆日有幾種不同版本,雖然都是根據明朝大統曆推算,但是可以肯定算法與明朝欽天監編算的大統曆算法稍有差異,而且不同版本有時也有差異。本網站將依明朝大統曆推算的結果與《殘明大統曆》曆日所有差異一一列出,其他有爭議的曆日也一一列出以供研究南明史學者參考,另有專文用曆算角度探討南明和明鄭曆法的朔閏。
秦朝及漢初(公元前221年 – 前104年)的曆法沿用顓頊曆的月序。顓頊曆是古六曆之一,據說戰國後期在秦國使用。顓頊曆以建亥(即今天的十月)為年首,但仍稱建亥為十月。月的數序是十月、十一月、十二月、正月、二月……九月,閏月置於年終,稱為後九月。秦朝的曆法與顓頊曆稍有不同。漢朝建立後基本上沿用秦曆,一百年間只作了少許修改,直到漢武帝太初元年(公元前104年)才頒行新曆法,以建寅(正月)為年首,並把閏月置於無中氣的月份,這使公元前104年的農曆年有十五個農曆月。秦朝為了避秦始皇名諱(正、政同音),把正月改稱「端月」,到漢朝又改回正月。本網站沒有跟從歷史,在秦朝仍稱建寅為正月。
本網站這時期的復原日曆是根據李忠林在2012年發表的文章「秦至汉初(前246至前104)历法研究—以出土历简为中心」李忠林。具體計算方法在秦與漢初曆法網頁闡述。雖然復原曆法有效年限估計是秦王政元年(公元前246年)前到漢武帝太初元年(公元前104年)五月,本網站年曆網頁從公元-220年(即前221年)起才用復原曆法、朔閏表網頁則從N-220年(即秦始皇二十六年)起才用復原曆法(年曆網頁以公曆為主、朔閏表網頁則以農曆為主)。兩網頁都在漢武帝太初元年五月起改用《三千五百年历日天象》張培瑜97的數據註五。復原曆法的太初元年三月是小月、四月是大月、五月是小月。改了曆法後,五月朔提前了一天,使四月變成小月,而新曆法的五月又是小月,於是出現了三、四、五三個相連小月,這在平朔法則是不可能的,只有在改曆時才可能出現。如果在太初元年六月才改用太初曆,就會使五月只有二十八日,這在平時也是不可能出現的。
戰國時代各國施行不同曆法,當時使用的曆法有六種:周曆、魯曆、殷曆、夏曆、黃帝曆和顓頊曆,合稱「古六曆」。六種曆法的計算方法大致相同,但各曆的年首不盡相同,用以計算曆法的曆元也不同。本網站在戰國時代列出所有六部古六曆,根據《中国古代历法》張陳薄胡書中第三章第六節所述的資料復原。具體計算方法在古六曆網頁敘述。
夏曆有兩個版本,差別是計算曆法時使用的曆元不同。本網站的夏曆在春秋時代和戰國時代所用的版本不同,春秋時期用的夏曆曆元是雨水合朔齊同,戰國時的夏曆曆元是冬至合朔齊同。
目前學界對於古六曆的閏月位置未有一致意見。本網站假設閏月置於年終,稱為閏月,不用註明閏幾月。有些學者認為當時以無中氣的月份為閏月,所以也註明無中氣的月份以供參考。顓頊曆較為特殊,以孟冬十月為年首,月序是十月、十一月、十二月、正月、二月……九月,閏月置於年終,稱為後九月。
雖然干支紀年可能到東漢才流行,本網站的中曆都載有干支紀年,年曆網頁和朔閏表網頁在1912年前還附加帝王年號。在戰國時代,周曆附加東周君王的紀年,周朝於周赧王五十九年(公元前256年)被秦國所滅,東周君王的紀年也到這一年為止。魯曆附加魯國君主的紀年,魯國於魯頃公二十四年(公元前249年)被楚國所滅,魯國君主的紀年也到這一年為止。顓頊曆大約在秦昭襄王時期(公元前306 – 前251)開始在秦國使用,顓頊曆自公元前306起附加秦國君主紀年。
古六曆在戰國時期創制行用,但是當時的曆法已經散失,今天我們只能從漢朝及以後的書藉得知古六曆的資料。這些「漢傳古六曆」與戰國時實際使用的古六曆差異有多大仍未可知。
春秋時期各國施行不同曆法,現在我們只能從《春秋》這部由孔子修訂的魯國編年史書中獲得當時魯國施行曆法的不完整資料。這裡稱當時魯國的曆法為春秋曆,本網站的春秋曆是根據《中国古代历法》張陳薄胡書中第三章第五節的資料復原。具體計算方法在春秋曆網頁闡述。
春秋曆沒有固定的置閏法則,正月的月建並不固定,而是在建亥(即現在的十月)與建寅(現在的正月)之間擺動。春秋初期的正月月建多在建丑(現在的十二月),末期則多在建子(現在的十一月)。目前學界對於春秋曆的閏月的位置末有一致意見。本網站假設閏月置於年終,稱為閏月,不用註明閏幾月。春秋曆沒有計算冬至(或其他節氣)的方法,當時的冬至是靠觀測而定,所以沒有曆書節氣。由於春秋曆在魯國使用,年曆網頁和朔閏表網頁中附加魯國的君主紀年。
除了春秋曆外,本網站還提供周曆、殷曆和夏曆(其中三部古六曆)的資料。一般認為這三部曆法應在春秋末期或戰國時代才建立,把這三部曆法在春秋時期列出僅供參考而已。如上一節所述,夏曆有兩個版本,本網站在春秋時期用的夏曆曆元是雨水合朔齊同。
[註一] JPL 在2020年推出了 DE440 和 DE441 曆表DE441取代 DE430 和 DE431 曆表。比較 DE431 和 DE441 算出的月相和節氣的 TDB 時刻,發現兩者在近幾個世紀差異甚微,在遠古和遙遠將來雖然差異較大,但仍未超出 TDB 轉換 UT1 的估計誤差,所以這裡仍用 DE431 算出的氣朔時刻。
[註二] 農曆法則網頁提到《國民曆》沒有登載農曆日期,但有載朔、上弦、望、下弦和二十四節氣的日期和時刻。那兩本書在這段期間的農曆應是根據這些日期和農曆的編算規則重編農曆。
[註三] 天文計算的慣例是在1582年10月15日起改用格里曆,之前用儒略曆,公元8年前則用逆推儒略曆(proleptic Julian calendar),但這規則並不是在各領域都會遵從,計算機軟件就是一例。有些軟件在1582年前仍用格里曆,謂之逆推格里曆(proleptic Gregorian calendar)。 Unix/Linux 的 cal 函數尤其古怪,在儒略曆1752年9月2日的次日才改用格里曆,這是大英帝國及其殖民地改用格里曆的日期,其時儒略曆與格里曆已有十一日偏差。在 Unix/Linux/MacOS terminal 執行 cal 1752 指令,便會發現9月2日的次日是9月14日。
[註四] 由於採用定氣後可出現一個月內有兩個中氣的現象,以致可以多出了一個無中氣月,稱之為「跨限」,因跨限而生的無中氣月不置閏。清初的做法以無中氣月為閏月,如果在幾個月內有兩個無中氣月,則似乎以「閏前不閏後」的原則以最先出現的無中氣月為閏月。但是到了嘉慶十八年(N1813)出現了新的問題,當時出現七個月內有兩個無中氣月的情況,欽天監以「閏前不閏後」的原則預編嘉慶十八年閏八月,但這會使當年冬至在十月三十日,出現了南郊大祀不在仲冬之月不合傳統的情況,於是嘉慶帝命欽天監再三詳細通查,最後欽天監曆官不再堅持「閏前不閏後」,改嘉慶十八年閏八月為嘉慶十九年閏二月(《清仁宗睿皇帝實錄‧卷二百四十二》實錄原文)。所以將冬至定在十一月比「閏前不閏後」的原則更重要,要以「前後兩年有冬至之月為準」,中積十三月者,才以「閏前不閏後」的法則置閏。將冬至定在十一月後,嘉慶十七月冬至月與十八年冬至月之間只有十二個月,所以即使其中的九月沒有中氣也不置閏,而嘉慶十八月冬至月與十九年冬至月之間有十三個月,應當置閏,當中只有一無中氣月在二月後,因此將之定為閏二月。《清史稿》的閏月法則應是在嘉慶十八年的事件後才確定的,雖然如此,我用其法則及時憲曆算出的合朔和中氣時刻編曆,得出的曆日符合清朝由順治三年至宣統三年266年間的實曆,順治二年的閏六月是唯一不符合《清史稿》法則的閏月。其實那266年間只出現了八次在幾個月內有兩個無中氣月的情況,嘉慶十八年的罕見現象只出現一次,清亡後至今(2024年)仍未再出現,下次會出現在N2033(癸丑年)。
[註五] 《三千五百年历日天象》自漢武帝太初元年正月起採用新曆法;從秦始皇三十一年(N-215)十月到太初元年十二月採用作者根據《元光元年曆譜》復原的曆法張培瑜78;從秦始皇二十六年(N-220)十月到秦始皇三十年(N-216)九月用顓頊曆。《三千五百年历日天象》並沒有說明這些細節,以上結論是比較書中曆表和張培瑜的另一本書《中国先秦史历表》張培瑜87中的曆表推斷的。《三千五百年历日天象》載太初元年十二月和正月連續兩月皆是小月,這在平朔法是不可能的,顯然是正月改曆的結果。
[国标] 《农历的编算和颁行》 修订稿 (2017年6月28日), 中华人民共和国国家质量监督检验检疫总局 及 中国国家标准化管理委员会 聯合發佈, 中國科學院紫金山天文臺草擬;
"国家标准《农历的编算和颁行》解读材料", 中國科學院紫金山天文臺。
[新编万年历] 《新编万年历(修定本)》, 中国科学院紫金山天文台編, 科学普及出版社出版(1986)。
[李忠林] 李忠林,"秦至汉初(前246至前104)历法研究—以出土历简为中心",《中国史研究》,2012年第二期,第17–69頁。
[劉寶琳] 劉寶琳,《100年袖珍干支月曆》, 商務印書館(香港), 1993.
[SM16] F.R. Stephenson, L.V. Morrison, and C.Y. Hohenkerk, Measurement of the Earth's rotation: 720 BC to AD 2015, Proc. R. Soc. A., 472:20160404 (2016); L.V. Morrison, F.R. Stephenson, C.Y. Hohenkerk, and M. Zawilski, Addendum 2020 to 'Measurement of the Earth's rotation: 720 BC to AD 2015', Proc. R. Soc. A., 477:20200776 (2021). HMNAO Earth rotation 網頁總結了他們的研究成果。
[實錄原文] 《清仁宗睿皇帝實錄‧卷二四二》記載的改閏月事件原文如下:
(嘉慶十六年四月庚午,內閣奉上諭。)
前據管理欽天監事務定親王綿恩等奏,查得嘉慶十八年癸酉時憲書係閏八月。是年冬至在十月內,為向來所未有,亦復查得十九年三月亦無中氣可以置閏,應否改為十九年閏二月等語。朕思置閏,自有一定,非可輕言更易,恐該監推步之處或有舛錯,因降旨交綿恩等再詳細通查。茲據奏稱,溯查康熙十九年、五十七年俱閏八月,是年冬至仍在十一月,與郊祀節氣均相符合。今嘉慶十八年閏八月,冬至在十月內,則南郊大祀不在仲冬之月,而次年上丁上戊又皆在正月,不在仲春之月,且驚蟄春分皆在正月,亦覺較早,若改為十九年閏二月,則與一切祭祀節氣,均屬相符,復將以後推算至兩百年,其每年節氣以及置閏之月,俱與時憲無訛等語。定時成歲,所以順天行而釐庶績,南郊大祀,應在仲冬之月,上丁上戊,應在仲春之月,此外一切時令節氣,皆有常則。今據該監上考下推,直至兩百年之遠,必須改於嘉慶十九年二月置閏,始能前後脗合,實為詳慎無訛,自應照此更正。至該監此次推算,據稱係時憲科五官正王嵩齡、何元泰、陳恕、何元海四員,將十八年時憲書與萬年書校出之後,向該堂官告知,復行詳察具奏等語。王嵩齡等四員俱著施恩,各加二級,其管理監務之定親王綿恩著施恩,紀錄兩次,監正額爾登布福文高、監副吉寧、陳倫、李拱宸、高守謙俱著施恩,各加一級。至從前何以於嘉慶十八年八月率行置閏,彼時職司推步者,實有錯誤,著該監查明如其人尚在,應奏聞後旨治罪。
[Vondrák] J. Vondrák, N. Capitaine, P. Wallace, "New precession expressions, valid for long time intervals", Astron. Astrophys., 534, A22 (2011).
[曉庵新法] 當時有不少學者極力反對用定氣註曆和置閏,其中最著明的兩位是王錫闡和梅文鼎。王錫闡在其《曉庵新法》的自序中不但非議用定氣來置閏,還指出欽天監為了避免給人留下話柄,改了康熙元年的正月朔日期:
上古置閏恆於歲終,蓋曆術疏闊計歲以置閏也。中古法日趨密,始計月以置閏而閏於積終,故舉中氣以定月,而月無中氣者即加閏。《大統》專用平氣,置閏必得其月,新法改用定氣,致一月有兩中氣之時,一歲有兩可閏之月,若辛丑西曆者不亦盭乎! 夫月無平中氣者,乃為積餘之終,無定中氣者,非其月也,不能虛衷深考,而以鹵莽之習,侈支離之學,是以歸餘之後,氣尚在晦,季冬中氣已入仲冬,首春中氣將歸臘杪,不得已而退朔一日以塞人望,亦見其技之窮矣!
文中說的「辛丑西曆」指順治十八年(N1661)的時憲曆。那年閏七月,其後的十一月有兩個中氣冬至和大寒,中氣雨水原先定在十二月三十日(即引文說的首春中氣將歸臘杪),以致次年(康熙元年)正月沒有中氣。為免遭人非議,欽天監「不得已退朔一日」,即將正月朔提前一日,使正月含雨水,十二月變成無中氣月。查臺灣國立故宮博物院的清代檔案檢索系統收藏的《大清康熙元年七政經緯躔度時憲曆》,得知雖然曆書所載正月朔在乙亥日(公元1662年2月18日),但從其所載的日月位置顯示合朔當在丙子日(2月19日),證實了王錫闡所言非虛。但是如此犯規操作也僅此一次,以後清朝日曆有另外七次出現幾個月內兩無中氣的情況,卻不見人為調動曆日,其中道光十三年正月的情況與本來的康熙元年完全一樣:雨水出現在道光十二年十二月三十,道光十三年正月無中氣,但當時沒有將正月朔提前一日。清亡後N1985(乙丑年)的正月也一樣沒有中氣,將來的N2034(甲寅年)正月也是如此。
縱觀定氣註曆的爭議,其歷史發展與用定朔註曆的情況相似。南北朝時何承天首先主張用定朔註曆,但因頻繁出現三個連大月與兩個連小月的現象,當時遭受強烈反對而未有實行。後來唐朝的戊寅元曆打破傳統,實行了定朔註曆,卻在貞觀十九年(645年)出現四個連大月而受到攻擊,復用平朔註曆。約二十年後李淳風創立《麟德曆》,再次用定朔註曆,但為了避免定朔法再受攻擊,引入了進朔法,減少了多個連大月和連小月的出現,進朔法在五代、兩宋和遼金的曆法都採用,到元朝《授時曆》才廢除,到了那時候,沒有人再非議四個連大月和三個連小月了,現代甚至有人不知道農曆有時會出現四個連大月。定氣註曆雖然已行用了近四百年,但到現在還有人非議,主張復用平氣,但論者卻沒有主張復用平朔。
[張培瑜78] 張培瑜, "汉初历法讨论",《中国天文学史文集》,科学出版社(北京),1978年四月,第82–94頁。
[張培瑜87] 張培瑜,《中国先秦史历表》,齐鲁书社(济南),1987年6月。
[張培瑜97] 張培瑜,《三千五百年历日天象》,大象出版社,1997年7月。
[張陳薄胡] 張培瑜、陳美東、薄樹人和胡鐵珠,《中国古代历法》,中国科学出版社(北京),2008年3月。
[鄭鶴聲] 鄭鶴聲,《近世中西史日對照表》,商務印書館,1936年; 1981年北京中華書局重印。