初稿: 2019年4月
本文細述本網(wǎng)站對秦至漢初(公元前221年–前104年)曆法的計算,曆法的復(fù)原方法採用李忠林在2012年發(fā)表的「秦至漢初(前246至前104)歷法研究—以出土歷簡為中心」李忠林12(也可參看李忠林2016年的著作《秦至漢初歷法研究》李忠林16)。復(fù)原方法的有效年限估計是從前246年至前104年,但是本網(wǎng)站只用在前221年至前104年。此復(fù)原法的要旨是把秦至漢初分為三個時段,每個時段有各自的合朔曆元,然後用四分術(shù)的朔策計算每個時段的合朔時刻,置閏按照3-3-3-2-3-3-2的年序經(jīng)驗法則在十九年置七個閏月,但在漢文帝後元元年(公元前163年)起改變了章週的起算年李忠林09。二十四節(jié)氣的時刻則與古六曆之一的顓頊曆相同。按李忠林的說法,置閏採用經(jīng)驗法則,二十四節(jié)氣與閏月規(guī)則毫不相干,這點我認為值得再探討,但這和復(fù)原曆法沒有直接關(guān)係,不在這裡討論。
本文所述的復(fù)原方法涉及古六曆和本網(wǎng)站之古六曆計算法,這些資料在本網(wǎng)站的古六曆網(wǎng)頁有敘述,這裡就不重複了。
內(nèi)容
備 註 和 參 考 文 獻歷代學(xué)者對於秦至漢初的曆法一直感到困惑。《史記》說漢初沿用秦朝曆法,《漢書》進一步說明所用的曆法是古六曆之一的顓頊曆。但是歷代學(xué)者已發(fā)現(xiàn)用顓頊曆推算出的漢初曆日與文獻常有不合,而多與殷曆相合。自宋人劉羲叟到近代學(xué)者陳垣,都主張秦與漢初的曆法是顓頊曆或殷曆。到了1972年,在山東省臨沂市銀雀山漢墓出土了《元光元年曆譜》,我們因此得知漢武帝元光元年(公元前134年)的曆日,曆譜所載的十三個朔日干支有十個與殷曆合,有七個與顓頊曆合,說明元光元年曆譜所用的曆法既不是顓頊曆,也不是殷曆,於是掀起了秦與漢初曆法研究的熱潮,學(xué)者們尋求一套曆法復(fù)原方法以符合《元光元年曆譜》。
漢初曆法雖然不是古六曆的任何一種曆法,但一般認為應(yīng)該仍是採用古六曆的四分術(shù)。秦與漢初的曆法用顓頊曆的月序,以十月為一年之始,月序數(shù)是十月、十一月、十二月、正月、二月……九月,閏月置於年終,稱為「後九月」,這點也是沒有爭議的。問題是只根據(jù)《元光元年曆譜》不能找出以四分術(shù)為本的唯一復(fù)原方法。據(jù)張培瑜在《中國古代歷法》張陳薄胡第三章第九節(jié)和「根據(jù)新出歷日簡牘試論秦與漢初的歷法」張培瑜07所述,以《元光元年曆譜》復(fù)原漢初曆法有58種可能,合朔時刻的上下限可相差87分鐘,在沒有其他資料的情況下無法判斷誰對誰錯,很多學(xué)者都提出各自的復(fù)原方法。上世紀八十年代及以後,情況又有了新進展。先是在湖北江陵縣張家山247號漢墓發(fā)現(xiàn)了從漢高祖五年(公元前202年)到高后二年(前186年)十七年的曆日竹簡,後來又在湖北省沙市區(qū)關(guān)沮鄉(xiāng)清河村周家臺30號秦墓出土的秦簡﹑和在湖南西部里耶鎮(zhèn)出土的秦簡都有秦朝的曆日資料。從這些考古新發(fā)現(xiàn)我們得知秦與漢初施行的曆法比以前認識的複雜,先前沒有一家的復(fù)原法能與新出土的曆日完全吻合。
據(jù)我所知,目前有兩篇文章嘗試用這些新出土的簡牘復(fù)原秦與漢初的曆法註一。其一是上面提及的張培瑜在2007年發(fā)表的「根據(jù)新出歷日簡牘試論秦與漢初的歷法」張培瑜07,另一是李忠林在2012年發(fā)表的「秦至漢初(前246至前104)歷法研究—以出土歷簡為中心」李忠林12。李忠林的研究成果也發(fā)表在其著作《秦至漢初歷法研究》李忠林16,筆者感謝李忠林教授贈送此書。兩者都認為秦與漢初的曆法不同,而張家山竹簡曆日所依據(jù)的漢初曆法與《元光元年曆譜》用的漢武帝時期曆法又不相同,但兩篇文章提出的曆法復(fù)原方法不同。
張培瑜對秦朝曆法的復(fù)原法採用四分術(shù)的朔策和歲實,以公元前606年(乙卯)己巳夜半霜降合朔齊同為曆元(公曆日期是前607年10月27日),並以小雪固定在十月為置閏標準。復(fù)原曆法與已公布的考古發(fā)現(xiàn)及文獻記載的(由秦昭襄王末年到秦亡)秦國曆日都相符。文章的表九載有從秦王政元年(公元前246年)到秦亡(前207)的朔閏表。
至於漢初的曆法,張培瑜的結(jié)論是不可能找到一種以四分術(shù)為本的曆法可以完全滿足從漢初到太初改曆前這102年的全部曆日。也就是說,如果漢初施行的曆法確是四分術(shù),則其間曆法必有修改過;如果漢初的曆法沒有修改過,則這曆法一定不是四分術(shù)。張培瑜試圖打破四分術(shù)的框架,以一種平朔法來復(fù)原漢初曆法。他假設(shè)的朔策是(29+663/1249)日,歲實是365.2496734日或(365+311.8420766/1249)日。這樣的歲實看似莫明其妙,其實只是朔策的235/19倍,寫成(365+5925/23731)日也可以。用235:19的比例顯然是為了符合十九年七閏的章週規(guī)律。張培瑜沒有明確說明復(fù)原曆法的曆元,但文章的表十給出從漢高祖元年(公元前206年)到漢武帝元封六年(前105年)的朔閏表註二。文章也沒有說明復(fù)原曆法的置閏法則,但有提及另一復(fù)原曆法的置閏法則是把立春固定在正月,這是相當(dāng)奇怪的置閏法則,而且明顯不符合文末表十的朔閏表。我根據(jù)張培瑜在《中國古代歷法》張陳薄胡第三章第九節(jié)所述的置閏法則得出正確的閏月。這法則是在漢文帝後元元年(公元前163年)前把冬至固定在十一月,在後元元年後則把雨水固定在正月。
張培瑜用非四分術(shù)的方法復(fù)原漢初曆法,頗似他對春秋時期魯國曆法的復(fù)原(張培瑜的春秋曆復(fù)原法可參考《中國古代歷法》張陳薄胡第三章第五節(jié),本網(wǎng)站的春秋曆就是採用這復(fù)原方法,詳情可參閱春秋曆網(wǎng)頁。)。張培瑜並沒有給出漢初行用非四分術(shù)的論據(jù),我應(yīng)為這做法只是數(shù)據(jù)擬合的模型,不是漢初行用曆法的依據(jù)。
李忠林在「秦至漢初(前246至前104)歷法研究—以出土歷簡為中心」李忠林12提出另一復(fù)原方法。他認為既然秦、漢初與漢武帝時期的曆日資料顯示這三段時間行用的曆法不同,最簡單的解釋是曆法在這段期間至少有過兩次改動。他於是用三種以四分術(shù)為本的曆法復(fù)原秦至漢初一百四十多年間的曆法,三種曆法以A、B、C名之。他主張三曆法都用顓頊曆的方法計算二十四節(jié)氣,只是合朔計算採用三個曆元。曆法A的曆元是秦孝公元年(公元前361年)十月丁巳朔無餘(公曆日期是前362年11月18日),曆法B的曆元是公元前240年十月乙亥朔無餘(公曆日期是前241年10月31日),曆法C的曆元是公元前206年十一月丁巳朔無餘(公曆日期是前207年12月14日)。「朔無餘」是指合朔小餘是零,即合朔發(fā)生在夜半(午夜零時)。曆法A的行用時間暫定為秦王政以前到漢高祖五年十二月,曆法B從漢高祖五年正月到文帝前元十六年後九月,曆法C從文帝後元元年十月到太初元年五月。
李忠林對於秦與漢初的置閏法則有獨特見解,認為置閏只是按照3-3-3-2-3-3-2的年序經(jīng)驗法則在十九年置七個閏月,但在漢文帝後元元年(公元前163年)起改變了章週的起算年。其實,李忠林在2009年的文章「試論秦漢初歷法的置閏規(guī)則」李忠林09已指出秦至漢初的所有閏月皆可從出土?xí)押喤c存世文獻推出來,所以雖然我們不知道當(dāng)時行用的置閏法則,但是仍能根據(jù)推出來的閏月復(fù)原曆法。
張培瑜與李忠林兩人提出的秦與漢初曆法復(fù)原方法雖然不同,但是比較他們提供的朔閏表發(fā)現(xiàn)在140多年間、1700多個朔日裡,只有19個朔日有差異,現(xiàn)在把這19個差異列於下表以供參考。表中的年份除了給出中國傳統(tǒng)的帝王或年號紀年外,還用Ny表示年首最接近公元y年1月1日的曆年。例如N-202表示漢高祖四年,始於公元-203年(即前204年)11月11日、終於-202年10月30日。
年份 | 月份 | 朔日 — 張培瑜 | 朔日 — 李忠林* |
---|---|---|---|
N-245 秦王政元年 | 二 | 戊申 (-245年3月5日) | 丁未 (-245年3月4日) |
N-239 秦王政七年 | 九 | 庚子 (-239年9月21日) | 己亥 (-239年9月20日) |
N-232 秦王政十四年 | 三 | 壬辰 (-232年4月9日) | 辛卯 (-232年4月8日) |
N-226 秦王政二十年 | 後九 | 甲申 (-226年10月27日) | 癸未 (-226年10月26日) |
N-204 漢高祖二年 | 十 | 辛巳 (-205年11月3日) | 壬午 (-205年11月4日) |
N-204 漢高祖二年 | 十二 | 庚辰 (-204年1月1日) | 辛巳 (-204年1月2日) |
N-204 漢高祖二年 | 二 | 己卯 (-204年2月29日) | 庚辰 (-204年3月1日) |
N-203 漢高祖三年 | 二 | 癸卯 (-203年3月19日) | 甲辰 (-203年3月20日) |
N-203 漢高祖三年 | 四 | 壬寅 (-203年5月17日) | 癸卯 (-203年5月18日) |
N-202 漢高祖四年 | 七 | 乙丑 (-202年8月3日) | 丙寅 (-202年8月4日) |
N-202 漢高祖四年 | 九 | 甲子 (-202年10月1日) | 乙丑 (-202年10月2日) |
N-183 漢高后四年 | 二 | 丁丑 (-183年3月8日) | 戊寅 (-183年3月9日) |
N-177 漢文帝前元二年 | 九 | 己巳 (-177年9月25日) | 庚午 (-177年9月26日) |
N-170 漢文帝前元九年 | 三 | 辛酉 (-170年4月13日) | 壬戌 (-170年4月14日) |
N-163 漢文帝前元十六年 | 十 | 癸丑 (-164年10月30日) | 甲寅 (-164年10月31日) |
N-136 漢武帝建元四年 | 五 | 癸卯 (-136年5月26日) | 甲辰 (-136年5月27日) |
N-129 漢武帝元光五年 | 十一 | 乙未 (-130年12月13日) | 丙申 (-130年12月14日) |
N-112 漢武帝元鼎四年 | 十二 | 丙戌 (-112年1月4日) | 丁亥 (-112年1月5日) |
N-106 漢武帝元封四年 | 七 | 戊寅 (-106年7月23日) | 己卯 (-106年7月24日) |
* 李忠林朔閏表中漢高祖七年五月朔的日干支有誤:己巳應(yīng)改為己卯註三,這錯誤在《秦至漢初歷法研究》李忠林16改正了。
鑑於兩套復(fù)原方法都能完全符合已出土的曆簡和傳世文獻,而且差異不大,二者可任選其一。仔細比較兩套算法,我認為李忠林的方法較為可取,所以本網(wǎng)站採用他的復(fù)原方法。下面各節(jié)詳細說明本網(wǎng)站的具體計算方法。
復(fù)原曆法的二十四節(jié)氣和顓頊曆相同,計算方法在古六曆網(wǎng)頁已有敘述,這裡只把公式列出。根據(jù)古六曆網(wǎng)頁公式(4)和表二的數(shù)據(jù),可得最接近公曆y年1月1日的冬至儒略日數(shù)是
JD(W(y)) = 1721050.5 + 19/32 + y·Ps (1)
其中Ps=365.25是四分術(shù)的歲實。其他二十四節(jié)氣的儒略日數(shù)可用古六曆網(wǎng)頁公式(5)計算:
JDq(j, y) = JD(W(y)) + (j/24)·Ps (2)
其中j是從冬至算起的節(jié)氣數(shù),以j=0表示冬至、j=1表示小寒、j=2表示大寒、j=3表示立春……j=23表示大雪(二十四節(jié)氣的名稱和次序可參閱本網(wǎng)站的二十四節(jié)氣網(wǎng)頁)。式中除了冬至落在y-1年的12月末外,其餘節(jié)氣都在公元y年。
合朔的儒略日數(shù)也可以寫成古六曆網(wǎng)頁中的公式(1):
JD(Mi) = JD(M0) + i· PL (3)
式中PL=(29+499/940)是四分術(shù)的朔策,i是從曆元合朔M0起算的積月,Mi是從曆元合朔M0起算的第i個合朔,JD(M0) 是曆元合朔M0的儒略日數(shù)。
上節(jié)說過復(fù)原曆法採用三個合朔曆元。以曆法A為例,曆元取秦孝公元年(公元前361年)十月丁巳朔無餘。用上一節(jié)定義的曆年記號,秦孝公元年是N-360,顓頊曆的十月朔是公元前362年11月17日,日干支是丙辰,比曆法A的曆元早一日。公元前362年11月18日(丁巳日)夜半的儒略日數(shù)是1589523.5,由此得出曆法A的JD(M0)=1589523.5。曆法B和C的JD(M0)也可用類似的方法計算,結(jié)果列於下表。
曆 法 A | 曆 法 B | 曆 法 C | |
---|---|---|---|
曆元 | N-360十月丁巳朔無餘 | N-239十月乙亥朔無餘 | N-205十一月丁巳朔無餘 |
行用時間 | N-245(秦王政元年)之前 – N-201(漢高祖五年)十二月 | N-201(漢高祖五年)正月 – N-163(文帝前元十六年)後九月 | N-162(文帝後元元年)十月 – N-103(武帝太初元年)五月 |
JD(M0) | 1589523.5 | 1633701.5 | 1646163.5 |
如果知道了從曆元合朔到曆年Ny十月朔的積月 A(y),Ny的十月朔便可用公式(3)把i換成A(y)求得,Ny的其他月份也可輕易計算。但是要知道A(y)的數(shù)值就要知道Ny之前的閏月分佈。下一節(jié)探討計算閏月和A(y)的方法。
在第一節(jié)(引言)已提及秦至漢初一百四十多年間的所有閏月都可從出土?xí)押喓痛媸牢墨I推出來,所以即使不知道當(dāng)時行用的置閏法則也能根據(jù)閏月的實際分佈復(fù)原秦至漢初的曆法,本網(wǎng)站就是以這原則處理秦至漢初的閏月。
年首積月A(y)可用類似本網(wǎng)站復(fù)原春秋曆網(wǎng)頁所述的方法計算。由於春秋時期魯國的曆法沒有固定的置閏規(guī)則,閏月和A(y)都必須根據(jù)閏月的實際年份逐年計算。秦至漢初曆法的閏月則分佈規(guī)整,而且符合古六曆網(wǎng)頁所述的3-3-3-2-3-3-2年份次序,只是在漢文帝後元元年(N-162)起改變了章週的起算年(詳情可參閱李忠林的「試論秦漢初歷法的置閏規(guī)則」李忠林09),所以閏月和A(y)不須要如春秋曆般逐年計算,只要掌握了一章週內(nèi)十九年的數(shù)據(jù)便可推出其他年份的閏月和A(y)。具體的計算方法是先定義兩個函數(shù)J和R:
k | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
J(k) | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 |
R(k) | 0 | 12 | 24 | 37 | 49 | 61 | 74 | 86 | 98 | 111 | 123 | 136 | 148 | 160 | 173 | 185 | 197 | 210 | 222 |
此處k是從某一章首起算的積年:k=0表示章週的第一年、k=1表示章週的第二年、k=2表示章週的第三年、……、k=18表示章週的第十九年。J(k)的數(shù)值表示該年有沒有閏月(即後九月):J(k)=0表示沒有閏月、J(k)=1表示有閏月。表中的0、0、1、0、0、1、0、0、1、0、1、0、0、1、0、0、1、0、1正是3-3-3-2-3-3-2的閏月規(guī)律。R(k)是從章週第一年第一個月起算的年首積月,R(k)可用以下遞歸公式計算:
R(0) = 0, R(k) = R(k-1) + 12 + J(k-1) (k=1, 2, ..., 18) (4)
也就是說年首積月第一年是0,其後每年增加12或13:沒有閏月就增加12、有閏月則增加13。表三所列的R(k)就是用遞歸公式(4)計算的結(jié)果。有了J(k)和R(k)兩個函數(shù)後,年首到曆元的積月A(y)可用以下公式計算:
c = floor( (y - yz)/19 ) (5)
k = y - yz - 19c (6)
閏月: 如果J(k)=0就沒有閏月、如果J(k)=1就有閏月 (7)
年首積月: A(y) = ΔA + 235c + R(k) (8)
其中floor(x)表示不小於x的最大整數(shù),yz是 某一章首的年份。如前述,漢文帝後元元年改變了章週的起算年,所以yz在文帝後元元年前和後元元年後的數(shù)值不同。c就是從yz算起到y(tǒng)對上一個章首的週期數(shù)。式(6)中k是從y到對上一個章首的積年,寫成k = mod(y - yz, 19)也可以,此處mod(X,Y)指X除以Y後所得之餘數(shù)。公式(8)的最後兩項代表從yz到y(tǒng)的積月,但是A(y)是從曆元到y(tǒng)的積月,所以要加上修正值ΔA。ΔA和yz在曆法A、B、C的數(shù)值列於下表,為方便查閱,這裡把表二的資料也一併列出。如上述,yz在漢文帝後元元年前後取不同數(shù)值,但漢文帝後元元年正是曆法C的起用年,故yz在曆法A和B取同一數(shù)值,在曆法C取另一數(shù)值。
曆 法 A | 曆 法 B | 曆 法 C | |
---|---|---|---|
曆元 | N-360十月丁巳朔無餘 | N-239十月乙亥朔無餘 | N-205十一月丁巳朔無餘 |
行用時間 | N-245(秦王政元年)之前 – N-201(漢高祖五年)十二月 | N-201(漢高祖五年)正月 – N-163(文帝前元十六年)後九月 | N-162(文帝後元元年)十月 – N-103(武帝太初元年)五月 |
JD(M0) | 1589523.5 | 1633701.5 | 1646163.5 |
yz | -225 | -225 | -179 |
ΔA | 1670 | 174 | 321 |
有了公式(1)–(3)、(5)–(8)、表二、表三和表四的數(shù)據(jù)就可以計算秦至漢初一百四十多年間的曆法,下一節(jié)用兩個例子展示實際的計算。
雖然復(fù)原曆法有效年限估計是秦王政元年前到漢武帝太初元年五月,本網(wǎng)站年曆網(wǎng)頁從公元-220年(即前221年)起才用復(fù)原曆法、朔閏表網(wǎng)頁則從N-220年(即秦始皇二十六年)起才用復(fù)原曆法(年曆網(wǎng)頁以公曆為主、朔閏表網(wǎng)頁則以農(nóng)曆為主)。兩網(wǎng)頁都在漢武帝太初元年五月起改用張培瑜《三千五百年歷日天象》張培瑜97的數(shù)據(jù)註四。復(fù)原曆法的太初元年三月是小月、四月是大月、五月是小月。改了曆法後,五月朔提前了一天,使四月變成小月,而新曆法的五月又是小月,於是出現(xiàn)了三、四、五三個相連小月,這在平朔法則是不可能的,只有在改曆時才可能出現(xiàn)。如果在太初元年六月才改用太初曆,就會使五月只有二十八日,這在平時也是不可能出現(xiàn)的。
先計算月份。根據(jù)表四,N-130應(yīng)用曆法C、JD(M0)取1646163.5、yz = -179、ΔA = 321。用公式(5)–(8)及表三得出:
c = floor( (-130 + 179)/19) = 2
k = -130 + 179 - 19×2 = 11
J(11) = 0 ⇒ N-130沒有後九月
A(-130) = 321 + 235×2 + 136 = 927。
有了年首積月後,N-130十月朔的儒略日數(shù)用公式(3)把i=A(-130)計算:
JD十月朔 = 1646163.5 + 927×(29+499/940) = 1673538.5 + 93/940
合朔小餘是93(略去分母940),用現(xiàn)行的時間系統(tǒng)即是說合朔時間是2時22分28秒。朔日正午的儒略日數(shù)是1673539,用儒略日轉(zhuǎn)公曆的標準方法(例如理查斯算法)算出對應(yīng)的公曆日期是公元前132年11月25日,用干支網(wǎng)頁的公式求得朔日的天干數(shù)是
1 + mod(1673539-1, 10) = 9,日天干是壬;朔日的地支數(shù)是
1 + mod(1673539+1, 12) = 9,日地支是申,所以朔日干支是壬申。
N-130的其他月份的合朔日期和小餘只須把十月朔的時刻加上朔策的整數(shù)倍便可求得。傳統(tǒng)的計算法是用大小餘,日數(shù)先定為29,把合朔小餘加499(略去分母940),如果大於940則減去940並把日數(shù)進一得30,下一個朔日便是29日或30日後。例如十月朔是壬申,小餘93,把小餘加499得592,日數(shù)是29,所以十月是小月,十一月朔在壬申日後29日。29=3×10-1,所以天干是壬之前的第一個天干,即辛;29=2×12+5,所以日地支是申之後的第五個地支(數(shù)到亥後回到子再數(shù)),即丑。因此十一月朔是辛丑,小餘是592。公曆日期是11月25日之後29日,即11月(25+29)日=12月(25+29-30)日=12月24日。當(dāng)然,傳統(tǒng)算法在編寫程式上會較為麻煩,不及儒略日數(shù)那麼方便。下表把十月至九月的合朔日期﹑干支和小餘列出。
月份 | 朔日公曆日期 | 朔日干支 | 合朔小餘 |
十(小) | 前132年11月25日 | 壬申 | 93 |
十一(大) | 前132年12月24日 | 辛丑 | 592 |
十二(小) | 前131年1月23日 | 辛未 | 151 |
正(大) | 2月21日 | 庚子 | 650 |
二(小) | 3月23日 | 庚午 | 209 |
三(大) | 4月21日 | 己亥 | 708 |
四(小) | 5月21日 | 己巳 | 267 |
五(大) | 6月19日 | 戊戌 | 766 |
六(小) | 7月19日 | 戊辰 | 325 |
七(大) | 8月17日 | 丁酉 | 824 |
八(小) | 9月16日 | 丁卯 | 383 |
九(大) | 10月15日 | 丙申 | 882 |
月大月小由兩朔日之間的日期間隔決定,兩朔日相差二十九日為小月﹑三十日為大月。合朔小餘是合朔離子正的時間以分數(shù)日表示,分母940往往略去。由於朔策是(29+499/940)日,每月的合朔小餘是前月的小餘加上499,達到或超過940則減去940,合朔小餘如果小於441,加了499後仍小於940,則此月是小月,大於或等於441時則是大月。
現(xiàn)在計算小雪、冬至、立春的日期和月齡,先計算冬至。用公式(1)求得N-130冬至的儒略日數(shù)是
JD冬至 = JD(W(-130)) = 1721050.5 + 19/32 -130×365.25 = 1673568.5 + 3/32
冬至小餘是3/32,冬至日正午的儒略日數(shù)是1673569,用上述的方法計算出對應(yīng)的公曆日期是公元前132年12月25日、日干支是壬寅,從表五可見冬至在十一月初二。至於冬至的月齡,按定義是冬至離之前的合朔時間,這裡用朔策的分數(shù)倍表示。冬至之前的朔是十一月朔。
JD十一月朔 = JD十月朔 + 29 + 499/940 = 1673567.5 + 592/940,
冬至月齡 = (JD冬至 - JD十一月朔)/(29 + 499/940) = 1163/74024 ≈ 0.3/19。
以上的計算保留了分數(shù),只是為了方便展示小餘的數(shù)值而已。其實本網(wǎng)站的曆法計算全部用十進制小數(shù),我在古六曆網(wǎng)頁的最後一節(jié)有詳細敘述,其中最後一個公式給出二十四節(jié)氣月齡的簡易計算法:
L = (JD - JD(M0))/29.53085106382979 (9)
節(jié)氣月齡 = L - floor(L) (10)
式中JD(M0)可從表二查得,曆法C的值是1646163.5。L是從曆元合朔M0起算到該節(jié)氣的時間間隔以朔策為單位,月齡是節(jié)氣與上一個合朔的時間間隔,以朔策為單位就是L的小數(shù)部分。以冬至為例,
L = (JD冬至 - 1646163.5)/29.53085106382979 = 928.0157111207177
冬至月齡 = L - floor(L) = 0.01571112207177 ≈ 0.3/19,與上面計算的數(shù)值一致。
其實每一個合朔的懦略日數(shù)都是JD(M0)加上朔策的整數(shù)倍,所以用任何一個合朔計算L都可以,得到的L只是整數(shù)部份不同而已。這裡就再以JD十月朔為例:
L = (JD冬至 - JD十月朔)/29.53085106382979 = 1.015711120717605
冬至月齡 = L - floor(L) = 0.0157111220717605 ≈ 0.3/19,也與上面計算的一致。
值得注意的是在古六曆很多曆法裡,冬至的月齡往往是1/19的整數(shù)倍,但在這裡卻不是,這是因為曆元氣朔並沒有冬至閏餘無的關(guān)係。即使在顓頊曆,曆元氣朔的關(guān)係是夜半立春合朔齊同,由此可算出顓頊曆的冬至在曆元年份的月齡是69/152=8.625/19,也不是1/19的整數(shù)倍,而曆法C的曆元乾脆不指定氣朔有任何關(guān)係,不是1/19的整數(shù)倍是正常的。月齡每年增加7/19(大於或等於一就把一減去),所以其他年份的月齡也不會是1/19的整數(shù)倍。
其他二十四節(jié)氣可用公式(2)計算。N-130的小雪應(yīng)在公元-131年,所以應(yīng)用y=-131來算,但是其實不一定要用公式(2)計算:小雪是冬至之前的第二個節(jié)氣,只須把JD冬至減去(2/24)Ps就可以了。
JD小雪 = JD冬至 - (2/24)×365.25 = 1673537.5 + 21/32
比較JD小雪和JD十月朔,得知小雪日在十月朔日之前一日,即11月24日,不屬於N-130。從表五可見N-129年首在前131年10月15日之後30日,即11月14日,而公元前131年的小雪必然在11月24日或前後一日,也就是說N-130沒有小雪。
立春是冬至之後的第三個節(jié)氣,所以
JD立春 = JD冬至 + (3/24)×365.25 = 1673613.5 + 3/4
L = (JD立春 - JD十月朔)/(29 + 499/940) = 2 + 5198/9253
立春月齡 = 5198/9253 ≈ 10.7/19。
立春小餘是3/4,立春日正午的儒略日數(shù)是1673614,對應(yīng)的公曆日期是前131年2月8日、日干支是丁亥,從表五可算出在漢曆的十二月十七。
從表二得知N-201正月前用曆法A,正月開始用曆法B,所以曆法A和B的積月都要計算。
先算曆法A,根據(jù)表四,JD(M0)=1589523.5、yz=-225、ΔA=1670。
c = floor((-201 + 225)/19) = 1
k = -201 + 225 - 19 = 5
J(5) = 1,但曆法A只用到十二月,N-201有沒有後九月由曆法B決定。
A(-201) = 1670 + 235 + 61 = 1966
JD十月朔 = 1589523.5 + 1966×(29+499/940) = 1647580.5 + 614/940
十月朔小餘是614,朔日正午的儒略日數(shù)是1647581,對應(yīng)的公曆日期是前203年10月31日、日干支是甲午。
至於曆法B,根據(jù)表四,JD(M0)=1633701.5、yz=-225、ΔA=174。
c = floor((-201 + 225)/19) = 1
k = -201 + 225 - 19 = 5
J(5) = 1 ⇒ N-201有後九月
A(-201) = 174 + 235 + 61 = 470
曆法B從正月開始使用,正月是十月後的第三個月,所以
JD正月朔 = 1633701.5 + (470+3)×(29+499/940) = 1647669.5 + 87/940。
正月朔小餘是87,朔日正午的儒略日數(shù)是1647670,對應(yīng)的公曆日期是前202年1月28日、日干支是癸亥。有了十月和正月的日期和朔小餘後,N-201其他月份的合朔只須加上朔策的整數(shù)倍即得,下表列出計算結(jié)果。
月份 | 朔日公曆日期 | 朔日干支 | 合朔小餘 |
十(大) | 前203年10月31日 | 甲午 | 614 |
十一(小) | 11月30日 | 甲子 | 173 |
十二(大) | 12月29日 | 癸巳 | 672 |
正(小) | 前202年1月28日 | 癸亥 | 87 |
二(大) | 2月26日 | 壬辰 | 586 |
三(小) | 3月28日 | 壬戌 | 145 |
四(大) | 4月26日 | 辛卯 | 644 |
五(小) | 5月26日 | 辛酉 | 203 |
六(大) | 6月24日 | 庚寅 | 702 |
七(小) | 7月24日 | 庚申 | 261 |
八(大) | 8月22日 | 己丑 | 760 |
九(小) | 9月21日 | 己未 | 319 |
後九(大) | 10月20日 | 戊子 | 818 |
如上述,月大月小可從小餘數(shù)值得知,小餘小於441是小月,否則是大月。但是這規(guī)則不一定適用於十二月,因為正月開始改用新曆法,所以必須從十二月朔和正月朔日期間隔定出十二月是大月還是小月。
節(jié)氣的計算與上面一樣。先算冬至,用公式(1)求得N-201冬至的儒略日數(shù)是
JD冬至 = 1721050.5 + 19/32 - 201×365.25 = 1647635.5 + 11/32。
冬至小餘是11/32,冬至日正午的儒略日數(shù)是1647636,對應(yīng)的公曆日期是前203年12月25日、日干支是己丑,從表六可算出冬至在漢曆的十一月廿六。由於冬至在正月之前,計算月齡時應(yīng)用曆法A的合朔,這裡且用JD十月朔來算:
L = (JD冬至 - JD十月朔)/(29 + 499/940) = 1 + 189201/222072
冬至月齡 = 189201/222072 ≈ 16.2/19。
小雪是冬至之前第二個節(jié)氣,所以
JD小雪 = JD冬至 - (2/24)×365.25 = 1647604.5 + 29/32
小餘是29/32,正午儒略日數(shù)是1647605,對應(yīng)的公曆日期是前203年11月24日,日干支是戊午,從表六可算出在漢曆的十月廿五。由於小雪就在十月,用JD十月朔計算月齡最直接。
小雪月齡 = (JD小雪 - JD十月朔)/(29 + 499/940) = 182383/222072 ≈ 15.6/19。
夏至在冬至之後半個歲實,所以
JD夏至 = JD冬至 + 365.25/2 = 1647817.5 + 31/32
小餘是31/32,正午儒略日數(shù)是1647818,對應(yīng)的公曆日期是前202年6月25日,日干支是辛卯,從表六可知在漢曆的六月初二。夏至在正月之後,算月齡時要用曆法B的合朔,這裡就用JD正月朔來算。
L = (JD夏至 - JD正月朔)/(29 + 499/940) = 5 + 9189/222072
夏至月齡 = 9189/222072 ≈ 0.8/19。
秦與漢初的曆法是後天的,即曆法的合朔時刻遲於真正的合朔時刻,如下圖所示,兩者相差的平均值約為一天,所以漢初的日食多發(fā)生在晦日(即朔之前一天),甚至晦日前一天。四分術(shù)的朔策比朔望月的平均值稍大,積三百年就會後天一日,所以在圖中明顯可見後天日數(shù)有逐漸增大的趨勢。
圖中所見的波動是因為曆法的合朔計算用平朔法,沒有計及月亮和太陽的不均勻運動。從秦王政元年到秦朝滅亡之間,曆法後天日數(shù)的平均值是1.03日。曆法A改為曆法B後,合朔小餘調(diào)小了144/940(≈ 0.15日),不足以改變曆法A的後天,只能暫緩後天日數(shù)之增長。曆法B改為曆法C後,合朔小餘調(diào)小了18/940(≈ 0.019日),更是無補於事。所以曆法後天的日數(shù)繼續(xù)增加,漢武帝元光年間(前134年至前129年)的平均後天日數(shù)是1.20日,到了漢武帝元封元年(前110年)以後後天日數(shù)增加到1.24日,直到太初元年改曆後才改正過來。這些平均後天日數(shù)的數(shù)值與張培瑜「根據(jù)新出歷日簡牘試論秦與漢初的歷法」張培瑜07給出的數(shù)值很接近。曆法後天如此嚴重,當(dāng)時不可能不知道,而應(yīng)該是故意的。
李忠林在《秦至漢初歷法研究》李忠林16分析指出曆法後天極可能受到天命論的政治思想影響,曆法家選取曆元,往往為了顯示統(tǒng)治者合乎天命而捨棄較為合天的曆元。例如曆法A的曆元選秦孝公元年就有強烈的天命論色彩,秦孝公在位期間採納商鞅的變法使秦國富國強兵。曆法C的曆元是漢高祖元年,也有明顯的天命論色彩。到了漢武帝太初元年的曆改天命論色彩更加濃厚,這點在《秦至漢初歷法研究》和《中國古代歷法》張陳薄胡都有詳細說明。
用上述方法可輕易算出二十四節(jié)氣在秦至漢初一百四十多年間的日期和月齡,其中小雪、冬至、大寒、立春和雨水的數(shù)據(jù)列於此網(wǎng)頁。正如上二節(jié)例一所示,某些年份有時沒有小雪,表中所列的數(shù)據(jù)是最接近當(dāng)年十月初一的小雪。從表中可見有一些小雪出現(xiàn)在前一年的後九月末。
節(jié)氣的月齡每年增加7/19 (mod 1),十九年循環(huán)一週,但是節(jié)氣的中曆日期卻不然。以冬至為例,上二節(jié)例一算得冬至在N-130(漢武帝元光四年)的月齡是1163/74024(≈0.3/19),也就是說冬至在合朔之後1163/74024個朔策,用現(xiàn)在通用的24小時制來說,冬至在合朔以後11小時8分6秒。例二亦算出十一月朔小餘是592(分母是940),換成24小時制,合朔發(fā)生在15:06:54,把這時間加上11小時8分6秒,便得冬至?xí)r刻是朔日下一天的02:15,所以元光四年的冬至在十一月初二。十九年後是N-111(漢武帝元鼎五年),這時冬至的月齡已循環(huán)一週又回到1163/74024,即冬至仍在合朔後11小時8分6秒,這時的十一月朔是N-130十一月朔之後235個月,朔小餘是mod(592 + 235×499, 940) = 357,合朔發(fā)生在09:06:54,把這時刻加上11小時8分6秒,得知冬至在朔日當(dāng)天的20:15,所以是十一月初一,和元光四年的冬至日期不一樣,這計算與此網(wǎng)頁的數(shù)據(jù)吻合。可見節(jié)氣的中曆日期並非以十九年為週期,用四分術(shù)的法數(shù)可知週期是一蔀,即七十六年。由於曆法A、B和C沒有一部的行用時間超過七十六年,所以有必要把一百四十多年的數(shù)據(jù)全部列出。
從表中可看到在文帝後元元年(N-162)以前,冬至一直固定在十一月,而且閏年都出現(xiàn)在冬至(和大寒)月齡大於12/19的年份。文帝後元元年後,由於閏月分佈有了改變,冬至不再固定在十一月了,反而大寒固定在十二月以及雨水固定在正月,而閏年則出現(xiàn)在雨水月齡大於12/19的年份。
表中雖然只列出幾個節(jié)氣,但我把所有二十四節(jié)氣都計算了,發(fā)現(xiàn)在文帝後元元年前,除了冬至外沒有其他二十四節(jié)氣固定在一個月內(nèi),除了冬至和大寒外也沒有其他節(jié)氣月齡大於12/19的年份與閏年吻合。文帝後元元年後,除了大寒和雨水外,沒有其他二十四節(jié)氣固定在一個月內(nèi);除了雨水外,沒有其他二十四節(jié)氣月齡大於12/19的年份與閏年吻合。這些資料或許是研究這段期間置閏法則的重要線索。
[註一] 本文的主要目的是說明本網(wǎng)站對秦與漢初曆法之復(fù)原法,並非學(xué)術(shù)論文,撰寫時並無搜索所有的相關(guān)文獻,如有文獻遺漏,敬請原諒。
[註二] 至今我仍摸不透張培瑜07年文章表十的朔閏表是怎樣算出的。只要知道其中一個合朔的日期和小餘,其他合朔的日期和小餘就可用張培瑜採用的朔策(29+663/1249)日計算出,但是表十只有日干支,沒有給出小餘。但這問題也不難解決,以表十的第一個合朔為例,合朔小餘有1249個可能:0、1/1249、2/1249、……、1248/1249。從漢高祖元年十月到漢武帝元封六年後九月有1262個朔日,只要把這1249個可能的小餘一一檢驗,就可知道哪個小餘值可得出完全符合表十的1262個朔日干支(略去表十最後一行的太初元年朔日)。我編寫了簡單的計算機程式,得出這1249個可能的小餘之中,只有611/1249能滿足表十的1262個朔日干支。每月小餘增加663,而mod(611+195×663, 1249) = 0,由此可知漢高祖元年十月後第195個合朔發(fā)生在夜半,但是這個朔是漢惠帝四年八月朔(公元前191年8月21日),日干支是丙戌,與文章所載的15蔀蔀首日名沒有一個相符。根據(jù)採用的朔策,一蔀有1249×29+663=36884日,而36884×3=9221×12,所以蔀首日名地支以三蔀循環(huán)一週,如果戌是其中一地支,則其餘蔀首日名地支只能是午和寅,但文章所列出的蔀首日名的三個可能地支是子、申和辰,顯然與丙戌不相容。但是以漢惠帝四年八月丙戌合朔發(fā)生在夜半這假設(shè)確能得出符合表十的所有朔日干支。
如果假設(shè)表十的干支不完全正確,則可求出一個可能的結(jié)果。這假設(shè)是漢高祖元年十月的朔小餘是613/1249,這樣的話就有兩個干支與表十不符:漢武帝建元四年五月朔和武帝元鼎四年十二月朔。有趣的是這兩個不合的日干支反而符合李忠林12文章的朔閏表。由於mod(613+860×663, 1249) = 0,高祖元年十月朔後的第860個朔日發(fā)生在夜半,這朔恰巧就是武帝建元四年的五月朔,日干支由表十的癸卯改為甲辰,而甲辰是文章列出的蔀首日名其中之一。由於這不是四分術(shù),蔀首只是合朔發(fā)生在夜半,但不保證氣朔齊同。用蔀日36884往前推,看看是否可以找到一個以某一節(jié)氣合朔夜半齊同的曆元,使二十四節(jié)氣的時刻接近顓頊曆的二十四節(jié)氣時刻。我發(fā)現(xiàn)一個可能的曆元是前6297年庚申日夜半芒種合朔齊同(公曆日期是前6297年6月12日,儒略日數(shù)是-578393.5),用此曆元計算的節(jié)氣時刻在公元前150年比顓頊曆的約早10分鐘。復(fù)原曆法的歲實比四分術(shù)的歲實稍短,用此曆元計算的節(jié)氣時刻在漢初比顓頊曆遲約15分鐘, 在武帝太初元年時卻比顓頊曆早約30分鐘。表十是不是用這個曆元計算?那兩個朔日干支是不是真的錯了?
[註三] 用李忠林文章所述的曆元計算出漢高祖七年五月朔的日干是己卯,但是即使不用曆元計算也可推出表中五月朔干支不對,而且應(yīng)該是己卯。這可從漢高祖七年四月朔和六月朔的日干支看出。表中列出四月朔和六月朔的日干支都是己酉,由此可知四月朔與六月朔相差六十日,唯一的可能是四月和五月都是大月。所以五月朔干支是己酉之後第三十個干支,即己卯。
[註四] 《三千五百年歷日天象》自漢武帝太初元年正月起採用新曆法;從秦始皇三十一年(N-215)十月到太初元年十二月採用作者根據(jù)《元光元年曆譜》復(fù)原的曆法張培瑜78;從秦始皇二十六年(N-220)十月到秦始皇三十年(N-216)九月用顓頊曆。《三千五百年歷日天象》並沒有說明這些細節(jié),以上結(jié)論是比較書中曆表和張培瑜的另一本書《中國先秦史歷表》張培瑜87中的曆表推斷的。《三千五百年歷日天象》載太初元年十二月和正月連續(xù)兩月皆是小月,這在平朔法是不可能的,顯然是正月改曆的結(jié)果。
[註五] 實際合朔時刻用現(xiàn)代天文的計算方法,即這pdf文件所述的方法,但是歲差要用該文7.2節(jié)所說的Vondrák等人的歲差模型計算,算出的TDB時刻用該文第8節(jié)的方法轉(zhuǎn)化為世界時UT1時刻。曆法合朔時刻用上面公式(3)計算JD(Mi),這可視為是當(dāng)?shù)氐牡胤綍r。秦朝京城咸陽和西漢京城長安的地理位置都很接近現(xiàn)在的陝西省西安市,經(jīng)度大約是東經(jīng)108.9°,所以京城地方時比UT1遲(108.9/15)小時=0.3025日,把JD(Mi)減去0.3025日便得曆法合朔的UT1儒略日數(shù),再減去實際合朔的UT1儒略日數(shù)便求得曆法的後天日數(shù)。從秦王政元年十月朔到漢武帝太初元年四月朔總共有1764個合朔,圖一就是用這1764個合朔的後天日數(shù)繪製而成。
[李忠林09] 李忠林,"試論秦漢初歷法的置閏規(guī)則",《四川大學(xué)學(xué)報(哲學(xué)社會科學(xué)版)》,2009年第6期(總第165期),第5–11頁。
[李忠林12] 李忠林,"秦至漢初(前246至前104)歷法研究—以出土歷簡為中心",《中國史研究》,2012年第二期,第17–69頁。
[李忠林16] 李忠林,《秦至漢初歷法研究》,中華書局(北京),2016年1月。
[張培瑜78] 張培瑜, "漢初歷法討論",《中國天文學(xué)史文集》,科學(xué)出版社(北京),1978年四月,第82–94頁。
[張培瑜87] 張培瑜,《中國先秦史歷表》,齊魯書社(濟南),1987年6月。
[張培瑜97] 張培瑜,《三千五百年歷日天象》,大象出版社,1997年7月。
[張培瑜07] 張培瑜, "根據(jù)新出歷日簡牘試論秦與漢初的歷法",《中原文物》, 2007年第5期,第62–77頁。
[張陳薄胡] 張培瑜、陳美東、薄樹人和胡鐵珠,《中國古代歷法》,中國科學(xué)出版社(北京),2008年3月。