中國是世界文明發達最早的國家之一。古代中國的天文曆法曾經達到了很高的水平。西漢武帝時期行用《太初曆》,已經認識到對日、月、年進行係統地協調,並且也考慮到和日食的周期相配合。從此以後,各代曆法改革都有相當清楚的記錄,因此,可以較為容易地複製出太初以來二千多年的朔閏表。但對太初以前的製曆情況,過去雖然進行過許多研究,可是由於資料不足和曆法發展本身的複雜性,至今卻仍然無法得出令人完全滿意的結果。近年來,相繼出土了大量的秦漢簡牘,其中包含著不少有助於研究曆法的極為可貴的資料。這些資料給我們許多新啟示,使我們現在有可能對戰國秦漢間的曆法做一次新的研究,並複製出準確可靠的長曆表。這就是本文的宗旨。
一、《顓頊曆》的基本數據和曆元
西漢武帝太初元年(公元前104年)以前,行用的曆法叫做《顓頊曆》。漢初的《顓頊曆》是沿用的秦的曆法。“漢興,方綱紀大基,庶事草創,襲秦正朔。以北平侯張蒼言,用《顓頊曆》。”[1]由此可見,至少在戰國晚秦以後,《顓頊曆》曾經是每年製定曆譜的依據。
《顓頊曆》是古四分曆的一種。四分曆的得名是因為它把一年的長度規定為三百六十五日又四分之一日。為了使季節和年度協調,當時使用十九年七閏法。十九年七閏,在戰國中後期,已經是製曆者早就掌握了的規律。
由此,《顓頊曆》的兩項基本關係是:
一年(指回歸年,古稱歲實)為365日。
每年十二個月,十九年中增加七個閏月。
從這兩項基本關係出發,可以推演出以下幾個數據:
(1)十九年中共有:
19×12+7=235月
(2)一月(指朔望月,古稱朔策)有:
(3)每十九年(古稱一章)中共有:
(4)每四個十九年,即七十六年(古稱一蔀)有:
古代,每一種曆法都要從一個標準的時刻開始來編製曆譜。這個標準的時刻叫做曆元。清曆算家梅文鼎說:“造曆者必有起算之瑞,是謂曆元”,[2]正是這個意思。根據上麵得出的幾個數據,把某一個原始的標準點即曆元,作為“起算之端”,按照六十幹支的順序,就可以排列出來無限期的長曆表。
關於《顓頊曆》的曆元有種種相近但不相同的記載,其中以後漢蔡邕的說法最為明確可靠。蔡邕在《月令論》中說:“《顓頊曆術》曰:‘天元正月己巳朔旦立春。’”[3]這就是說《顓頊曆》的原始標準點是某一年的正月朔日(初一)半夜零時零分,恰為立春,這一天的幹支是己巳。按照“正月己巳朔旦立春”為曆元編製《顓頊曆》的長曆表,若幹年以後還會出現“正月己巳朔旦立春”,它的周期是一千五百二十年。這個循環周期是由十九年一章和七十六年一蔀積累而成的。
從曆元開始,經過十九年以後,也就等於經過二百三十五個月以後,新的一年的開始也正是新的月分的開始,立春和合朔在同一點上,因此每一章開始的每一天都是正月朔日立春。所以,十九年構成一個小循環周期。十九年共有日,有小餘四分之三日,立春合朔的時刻由前一章的半夜零時,移到了這一天的四分之三日,即十八時(今時,下同)。
每四章一蔀,共有27759日,沒有尾數。因此,每蔀的開始都是正月朔旦立春,即正月初一半夜零時零分合朔,又正好立春。所以七十六年構成一個中循環周期。但是曆元是己巳日,按照六十幹支的排列,經過一蔀以後,新的一蔀開始不再是己巳日。因27759日不能被60整除。它的關係是:
27759-n·60=39(設n=任意正整數,下同。)
這就是說第一蔀以己巳為蔀首日,第二蔀的蔀首日在幹支表上己巳以後的第39位,查幹支順序表為戊申。以此類推,經二十蔀,又為己巳。因此,構成“正月己巳朔旦立春”的大循環周期為:
76×20=1520年
由此可以知道,《顓頊曆》以“正月己巳朔旦立春”為曆元,可以排出1520年不同的朔閏表。1520年以後,周而複始,永無止期。[4]
以上所述是相對的時間概念,它能夠解決曆表的排列次序。但要複製出晚秦漢初行用過的曆表,還必須推求出絕對的時間概念。因此,《顓頊曆》的某一入蔀年究竟相當於曆史上的某一年,必須準確無誤,才能符合我們提出的要求。
據《新唐書·曆誌·大衍曆議》所述:“魯宣公十五年丁卯歲,《顓頊曆》第十三蔀首,與《麟德曆》俱以丁巳平旦立春,至始皇三十三年丁亥,凡三百八十歲,得《顓頊曆》壬申蔀首,是歲秦曆以壬申寅初立春。”[5]《新唐書·曆誌》的記載,把《顓頊曆》的排列次序和曆史年代結合起來,這就解決了絕對年代的問題。當然,這個完整的《顓頊曆》二十蔀循環周期,是把它的行用期上推下衍的結果。顯然,《顓頊曆》的開始實行絕不會早到公元前1506年。在戰國秦漢間,製曆者大約是從公元前366年甲寅蔀開始計算的。《淮南子·天文訓》就說:“凡二十紀一千五百二十年,大終,日月星辰複始甲寅元。”實際上,隻要絕對年代吻合,從這二十蔀的任何一點開始計算,其結果也都必然是相同的。為和《顓頊曆》行用期間接近,並結合曆史記載,本文即采用從甲寅蔀開始計算的方法。
上述的推論是依據可靠的曆史資料和基本的計算,自然不誤。前人的研究已認識到並采用過上述的方法。那麽,按理用這個方法排出長年曆表,應該和曆史上真正實行過的曆表一致,應該和曆史記載以及出土資料中的記日幹支符合。然而事出所料,簡單地用這個方法編製朔閏表,仍然會遇到許多難題,常常和已有的資料相矛盾。這是因為在《顓頊曆》行用的過程中,還有一些曲折複雜的情節。從來恢複《顓頊曆》的曆表沒有獲得完全成功的症結,正是因為對這個曲折複雜的情節認識不足的緣故。
山東臨沂銀雀山出土的《元光曆譜》[6]告訴我們,漢初的曆譜包括置閏、連大月、分至點(節氣)、歲首等項目。以下對這幾個項目分別進行討論,最後再根據研究的結果來編製長年曆表。
二、閏年設置法
《顓頊曆》歲實為日,朔策為日,每一年相當於十二個月還多一些:
這就是說,每年設十二個月,還有日的尾數[7],稱為大餘。為了使季節和年度相適應,平均二年多需要加一個閏月,加閏月的年度稱為閏年,為方便起見,我們稱這十九年的單位為閏章,以區別於前文所述十九年一章的朔章。在一個閏章中,閏年的安排有一定的規律,即:“三歲一閏,六歲二閏,九歲三閏,十一歲四閏,十四歲五閏,十七歲六閏,十九歲七閏。”[8]這就是說,在一個閏章中,第三、六、九、十一、十四、十七、十九年為閏年,因為在這七個年度大餘累積超過朔策。其餘則為平年,平年積餘小於朔策。
1,故凡積餘在日以上者,加本年大餘必然超過朔策,所以該年必置閏。
2、置閏以後大餘必在10日以下,故凡積餘在日以下者,即以十月為歲首的《顓頊曆》冬至在十一月十一日以前,上一年必定是閏年。
《顓頊曆》的歲實是以立春為標誌,即從第一年的立春到第二年的立春為一個回歸年。但置閏始終是以冬至為標誌,因為置閏的目的是為了調節季節,而隻有冬至是實測季節的標準時刻,其它節氣是由冬至推算出來的。閏章從十一月朔旦冬至開始計算,朔章從正月朔旦立春開始計算,兩者不可能始於同一年,這就使《顓頊曆》的置閏關係複雜化了。
另外,據《漢書·武帝紀》、《郊祀誌》記載,武帝元鼎五年(前112年)“十一月辛巳朔旦冬至”,據《漢書·武帝紀》、《律曆誌》記載,“武帝元封七年(前104年)十一月甲子朔旦冬至”。按表三所得第二項規律,這兩個年度的積餘為零,[13]小於日,可知這兩年的前一年必為閏年。因此,元鼎五年的前一年元鼎四年(前113年)和元封七年的前一年元封六年(前105年)都是閏年。合上表,共得十七個有絕對年代的置閏年。
因為每一個閏章中,閏年的次序是固定的,所以用已知的閏年可以推出其它閏章的未知的的閏年。公式如下:
已知閏年±n·19=閏年
按公式,前105年是已知閏年,那麽:
前105+1·19=前124年
前105+2·19=前143年
前105+3·19=前162年
前105+4·19=前181年
前105+5·19=前200年
……
據上麵的公式推算的結果,前124、143、162、181、200各年都應該是閏年。但是把這個推算的結果和表四所列的資料對照考察,可以發現是有矛盾的。據表四第五、第九項記載,前199、180年是閏年,推算結果前200、181年是閏年。如果兩者都對,那就出現了連續兩年置閏的情況,而這在當時是絕對不可能的。產生這個矛盾的原因是因為在前162年的時候,閏章有了改變。為了易於區別,我們稱改變前的閏章為第一式,改變後的閏章為第二式。除用前105年這個閏年,其它已知閏年推出的未知閏年都符合閏年排列的次序。
閏章和朔章相比較,第一式第十三年是朔章第一年,第二式第五年是朔章第一年。這個改變隻需把第一式第九年置閏改為第八年置閏就行了。具體說來,把原應在前161年的置閏提前一年,改在前162年置閏,就形成了改變閏章的結果。
何以在公元前162年發生改變閏章的現象呢?這是一個頗為費解的問題。原來這和漢文帝時期發生的關於製度改革的一場爭論大有關係。
漢朝初年,在製定法令製度方麵,張蒼曾起過不小的作用。他曾做過秦朝的柱下禦史,對秦的各項製度都很熟悉。張蒼本人對曆法也深有研究,沿用秦的《顓頊曆》就是他的主張,《漢書·張蒼傳讚》載“張蒼文好律曆,為漢名相,而專遵用秦之《顓頊曆》”。到了漢文帝十年四(前166年),有人提出“宜改正朔,服色上黃”,[14]用土德代替秦的水德,全麵改變製度。曆法家公孫臣便是激烈的倡導者之一。改曆之議,遭到張蒼的強烈反對。兩個曆法流派經過了幾年的論爭,公孫臣一派終於占了上風,到文帝十六年(前164年,)“召公孫臣以為博士,草立土德時曆製度,更元年。”[15]為了表示實行新的製度,文帝在前163年改元,次年即前162年提前一年置閏。這些顯然是公孫臣製定的新的“時曆製度”的內容。本來文帝是要大大改革一番的,但這個改革又因為別的原因沒有再搞下去,結果除了更元年和減朔餘25分(見下文)以外,就隻是在曆法方麵留下了改變閏章這個痕跡而已。
這是閏章改變的曆史背景。至於說在曆法史上,這一改革究竟有什麽意義,當然還需要做進一步的說明。張蒼是《顓頊曆》的擁護者,公孫臣反對張蒼,當屬於和《顓頊曆》相對立的另一個曆法家的派別。閏章第二式即是後來完整化的《殷曆》的閏章,可見公孫臣是屬於《殷曆》一派。《殷曆》也是古四分曆之一,歲實和朔策與《顓頊曆》並無差別。《殷曆》以十一月甲子朔旦冬至為曆元,這和《顓頊曆》以立春為曆元是不同的。在《顓頊曆》實行期間,由於閏章和朔章的交錯,實際存在著兩個曆法上的冬至,一個是《顓頊曆》以立春為標準計算出來的朔章的冬至,一個是作為置閏標準的閏章的冬至。閏章由第一式改為第二式以後,閏章的冬至便可以恒定在十一月了,但朔章的冬至便不能恒定在十一月。因此,閏章的改變在曆法史上意味著閏章的冬至和朔章的冬至爭奪恒定在十一月的位置,這也就意味著以十一月朔旦冬至為曆元的曆法要取代以正月朔旦立春為曆元的曆法,實即《殷曆》對《顓頊曆》進行的衝擊。這正是公孫臣和張蒼論爭的實際內容。根據《元光曆譜》來看,後來社會上通用的仍然是朔章的分至點(參看下文四),正是因為文帝中止了改革的緣故。這一次除了閏章的改變以外,公孫臣一派並沒有獲得更大的成績。但以十一月朔旦冬至為曆元畢竟是先進的和優越的,因而終於在武帝太初年間實行新曆時,成為《太初曆》的標準。
總之,在《顓頊曆》行用期間,置閏關係有第一式和第二式的變化。了解了這個變化,就克服了複製晚秦漢初長曆表的第一個難題。
三、連大月的排列
《顓頊曆》朔策為日,相當於二十九天半多一點,因此就產生了大月小月的問題。小月二十九日,大月三十日,互相間錯,以使合朔始終在每月的初一。但是朔策並不恰好是二十九天半,它比日還要多日,這個尾數累積久了,就必須多置一個大月來加以調整。本來大月小月是間錯排列的,這樣就形成了若幹個月以後,有兩個大月相連的情況。大月相連稱為連大月。正確地排列連大月也是複製曆表的一個重要課題。根據日的小餘來計算,每隔十七個月或十五個月便要設置一次連大月。
可知每十七個月設置一次連大,但仍有小餘日。這個小餘需並入下一個月。第二次十七個月設置連大以後,又有小餘日,兩次餘數積累為日。這個餘數並入下一個月以後,經十五個月便要設置連大,這時,小餘為日,因此,每十七個月設置連大時,餘數為23,每十五個月設置連大時去餘數35.從蔀首開始,每蔀共置五十八次連大。連大月的排列有它自己的周期。
《顓頊曆》每蔀開始按照表七的排列次序設置連大月,每蔀九百四十個月構成一次循環。以公元前366年正月甲寅朔旦立春為曆元,用這個連大排列法,證明和現有資料是吻合的。
四、分至點
《元光曆譜》載有十一月二十八日丙戌冬至、正月十五日壬申立春、六月三日戊子夏至、七月二十日甲戌立秋四個節氣。因而我們知道當時通行的曆譜上是注明節氣的。這裏有兩個問題需要研究:一、這四個分至點在該日的哪一時刻?二、這四個節氣是按照《顓頊曆》曆元正月朔旦立春來推算的,還是照按閏章的標誌十一月朔旦冬至來推算的?弄清了這兩個問題才能計算出其它各年的分至點。
可以知道立春距夏至為136日23時15分。根據《元光曆譜》可知,正月十五日立春距六月三日夏至中間相隔有135日,再加上正月十五日和六月三日本身,共得137日。由此可以得出結論,元光元年立春的時刻必定在正月十五日壬申這一天的0時0分至0時45分之間。假如立春在0時45分以後,夏至就將進入六月三日戊子以後的第二天,即六月四日己醜。這是和《元光曆譜》相矛盾的,所以不能成立。
按照正月朔旦立春為曆元計算,由於歲實有尾數日,立春必將依次在第一年的0日,第二年的日,第三年日,第三年的日,第五年又為0日。合成小時計算,立春必在0時、6時、12時、18時這四點上。上麵據《元光曆譜》考察,元光元年立春在正月十五日壬申0時至0時45分之間,和由曆元計算的立春點結合起來看,該年的立春在正月十五日壬申0時0分是毫無疑問的。
確定了立春點,就可以按表八推算出該年其它各分至點的時刻。結果是冬至在十一月二十八日丙戌8時15分,夏至在六月三日戊子23時15分,立秋在七月二十日甲戌15時0分,和《元光曆譜》的記載完全符合。見下表:
表九
另一方麵,也可以用《顓頊曆》的曆元來求出元光元年的立春。公元前366年正月甲寅朔旦立春,下距元光元年為232年。積日為:
日
按照六十幹支順序為:
從甲寅下數18正為壬申始,即壬申日0時0分。這說明,公元前366年甲寅朔旦立春,經232年以後,至元光元年的立春必為壬申日的開始,此和上文用《元光曆譜》推算的結果恰相一致。[17]這就證明了《元光曆譜》上標列的節氣是按照《顓頊曆》的曆元推算出來的。
下麵再以閏章的冬至來和《元光曆譜》所提供的分至點進行驗算。據表五可以知道元光元年即前134年,屬於閏章第二式的第九年。前文已說明,閏章第二式實際上就是《殷曆》的閏章。前134年屬於前199年開始的《殷曆》丙午蔀第四章。丙午蔀首冬至距元光元年為:
199-134=65
積日為:
365×65=23741日
按照六十幹支順序為:
23741-n·60=41
從丙午下數41為丁亥日的日,即丁亥日6時。這裏按閏章計算的結果,元光元年的冬至當在十一月二十九日丁亥的6時,而《元光曆譜》明確記載冬至在十一月二十八日丙戌。可見,《元光曆譜》的節氣不是按十一月朔旦冬至計算的。由此可以得出結論:《元光曆譜》的分至點即是朔章的分至點,亦即《顓頊曆》的分至點,而不是閏章的分至點,亦即不是《殷曆》的分至點。《顓頊曆》元光元年冬至在丙戌日8時15分,《殷曆》冬至在次日丁亥6時,這就是說,《殷曆》的各節氣恒定在《顓頊曆》各節氣之後21時45分。[18]關於分至點今時與940分日之折算。
總之,《元光曆譜》上的分至點是由《顓頊曆》的曆元推算出來的,而分至點的時刻也可以確定,因而,根據這個結果可以推算出《顓頊曆》行用期間各年度的節氣。
五、秦以十月為歲首始自何時
按照《史記》的說法,秦以十月為歲首始於秦統一中國,即秦始皇二十六年,公元前221年。《史記·秦始皇本紀》記載:“二十六年……始皇推終始五德之傳,以為周得火德,秦代周德,從所不勝。方今水德之始,改年始,朝賀皆自十月朔。”《曆書》、《封禪書》中也有類似的記載。但這個記載是不正確的。
《呂氏春秋·季秋紀》:“季秋之月……為來歲受朔日”高誘注:“來歲,明年也。秦以十月為正,故於是月受明年曆日也。”《呂氏春秋》成書於秦始皇八年,可見十月歲首不始於秦的統一。這個問題,清代許多考據家都曾經提出過,[19]例如汪曰楨說:“秦以十月建亥為歲首,閏在歲未,謂之後九月,不知始於何年。《史記·秦本紀》昭襄王四十八年十月在正月前,則未並天下時已如此矣。”[20]在《長術輯要》中,他把惠文王元年暫定為十月歲首的開始。在新發現的雲夢秦簡《大事記》中,有“(秦昭王)五十六年後九月”的記載,昭王時代置閏於後九月,這有力地說明了至少在秦統一中國的幾十年以前,就實行了以十月為歲首的製度。可以肯定,《史記》的記載是有問題的。
《史記》中記述秦統一以前有月分的資料,有時十月在正月前,有時十月在正月後,究竟是以十月,還是以正月為歲首,搞得相當混亂。造成混亂的原因有二。一是司馬遷在寫《史記》的時候,資料不足。他在《史記·六國年表》中就曾歎息說:“惜哉,惜哉!獨有《秦記》,又不載日月,其文略不具。”因為材料太簡略,為使敘述方便,司馬遷無法嚴格地按照月份的次序來撰著每年當中的事件。二是《史記》在流傳過程中又有偽誤。例如《秦始皇本紀》中記載:“(秦始皇)四年,拔暢、有詭。三月,軍罷。秦質子歸自趙,趙太子出歸國。十月庚寅,蝗蟲從東方來,蔽天。”三月在前,十月在後,應當說明以正月為歲首。但這裏的十月可以斷言為七月之誤。十和七兩字在早期隸書以前的古文字中,極易互錯。再者,十月無蝗災,《兩漢書》中的《五行誌》共載蝗災二十九次,絕大部分在夏秋,從未發生在十月。《史記·六國年表》秦始皇四年欄內,正作“七月,蝗蔽天下。”[21]十月校改為七月後,就不能據此否定十月歲首的可能性。
我們再來看一看雲夢秦簡《大事記》中的另一條重要資料:“(秦昭王)卌五年,攻大野王。十二月甲午雞鳴時,喜產。”在這裏,“十二月甲午”和歲首的關係很大。同是昭王四十五年十二月,以正月為歲首和以十月為歲首,實際相差一年。
如果以正月為歲首,昭王四十五年十二月指上表中的後一個十二月,如果以十月為歲首,則指上表中的前一個十二月。根據本書《顓頊曆表新編》表二,後一個十二月朔為乙巳,甲午在乙巳後第五十,本月無甲午,而前一個十二月朔為辛巳,甲午為十四日。由此可見,昭王四十五年十二月隻能是指上表中的前一個十二月,也就是說,當時實行的必定是十月歲首的製度,而不可能是正月歲首的製度。
《顓頊曆》既以正月朔旦立春為曆元,在它行用之初,必然是以正月為歲首的。秦在奉行《顓頊曆》的過程中,把歲首由正月改為十月。這個改動決不是秦統一中國以後才開始的,《史記》關於秦歲首製度的記載是頗有問題的。但改動歲首究竟始於何時,現在沒有據以推論的資料。我們知道,至遲在昭王時期,這個改動已經進行了,因此,《顓頊曆表新編》表一、表二暫定十月歲首從昭王元年開始。
在曆法史上這個改革有很大意義。當時,閏月置於歲末,正月歲首閏十二月,十月歲首閏九月。歲首改動以後,閏十二月改為閏九月,閏月從冬至和立春之間移到了冬至以前。正月歲首的《顓頊曆》,冬至在十一月、十二月之間不停地變換。把閏月改在冬至以前,就使得冬至大大趨向於恒定在十一月了,參看下文《顓頊曆表新編》表一、表二冬至點。這是《顓頊曆》行用過程中的一大進步。
六、關於曆元的調節
上文討論了閏法、連大法、分至點和歲首,結合各蔀章的曆史年代,應該能夠製定出《顓頊曆》實用的曆表。但據此製出的曆表,與曆史記錄和出土簡牘中的朔日幹支對比,可以發現仍有許多不相符合之處。
古四分曆以365.25日為歲實,和實際的回歸年365.2422(密近)相比較,每年有0.0078日的誤差。每130左右,約差一天。結果是日蝕往往是在晦日而不是在朔日出現。從公元前366年到秦始皇元年(前246年),已經過了120之久,天象和節氣的誤差已相當明顯。要解決這個問題,便要調節曆元,把原來設定的曆元向前推和向後移若幹年。當然調節曆元以後,曆史上的年月朔望全都發生了改變,這當然是行不通的。而當時的曆法家便想出了另外一個簡單易行的辦法,那就是從特定年份開始,加減朔餘。這樣做可以和調節曆元達到相同的效果。《漢書·律曆誌》記載漢武帝時進行曆法改革,曆法家鄧平主張八十一分曆,並采用“先藉(借)半日,名為陽曆”的方法,以製定《太初曆》,後來太史令張壽王指責《太初曆》“虧小餘四分 之三日,去小餘七百五分”,可見當時曆法家使用增減朔餘的方法是確定的事實。另外,改變朔餘往往在改朝換代或帝王登基時執行,這可能和統治者篤信陰陽五行的輪替也有一定的關係。
1983年發現的張家山秦漢曆法資料,1993年發現的關沮周家台秦始皇和秦二世曆譜以及2002年發現的裏耶秦代記日幹支資料,[22]使我們在《元光曆譜》的基礎上,增加了許多新的資料。筆者對這些曆譜進行深入研究之後,現提出一個新的推步方法:即秦代曾增加朔餘四分之三日,進朔705分,其時間在秦始皇元年(前246年);漢代曾減少朔餘四分之一日,但漢初退朔是分兩次進行的,第一次退210分,時間在漢高帝元年(前206年),第二次退25分,時間在漢文帝後元二年(前162年)。用這一方法編製《顓頊曆》的曆表,和文獻資料及考古資料可以達到高度的契合。兩相印證,應該說其準確性絕非偶然。下文《顓頊曆表新編》就是嚴格按照上述各準則製成的。如有新的秦漢曆譜考古發現,對《顓頊曆表新編》進行驗證,或許還有誤差,但可確信需要改動的空間,已經很小了。
現對上列三項秦漢曆法資料,再分別進行一些說明。
首先是關於裏耶秦簡中的幹支。其朔日幹支起於秦始皇二十六年、止於三十五年,前後十年,共有十五項,驗之《顓頊曆表新編》,完全符合。係於朔日幹支之下的非朔日幹支,共有數十項之多,除一項為明顯的誤記外,並無錯誤。
關於周家台秦代曆譜。該曆譜共存有四個年份,即秦始皇三十四年、三十六年、三十七年及秦二世元年。這四年的曆譜可分兩類。秦始皇三個年份為一類,秦二世元年為另一類。前一類可稱之為私譜,應是由“民間治曆者”[23]編製的。民間治曆者水平高低不等,此或是初習者所為,目的是為個人記事方便,製作當在朝廷頒布下一年朔閏之前,故與官方曆譜有很大的差別。這三年的曆譜錯誤百出,多處違背曆法的基本原理。例如秦始皇三十四年十一月十二月連大,七月八月九月又有三個月連大,這根本是不可能的。三十六年八月九月和三十七年十月出現三個月連小。四分曆無連小,這裏竟出現三個連小月,更是不可思議。這樣的曆譜是不能和曆史上任何一年的正式官方曆譜相一致的。但秦二世元年曆譜則另當別論,其書寫格式、書寫材料與前三年曆譜迥然不同,其內容符合製譜規律,大小月也間錯無誤,當是官方發布的正式曆譜。故下文《顓頊曆表的驗證》隻收錄秦二世元年曆譜,其它三年則不予采用。
關於張家山曆譜。張家山曆譜現存漢高帝五年至呂後二年共十七年的朔日幹支,其中有殘缺。但根據現存朔閏幹支,可將缺項補齊。在張家山曆譜中,漢高帝九年七月朔日應為丙申,曆譜誤為丁酉,[24]其它各項均準確無誤,亦符合製曆原理。在張家山漢簡中,有一部分稱為《奏讞書》的,附有若幹秦漢朔日幹支。其中秦始皇六年八月朔日丙子一項甚為重要。按《顓頊曆》古法,該月朔日為乙亥,朔餘387,《奏讞書》記為丙子,在己亥後一日。940——387=553,即朔餘至少增553,才能使朔日為丙子。由此可見始皇初年確有進朔的舉措。依同樣原理,可知漢初有減朔的情況,否則和張家山曆譜中的漢初朔日幹支便無法吻合。這裏須注意兩點。其一,在朔餘改變時,會出現大小月銜接一次性異常;其二,隻改變朔餘而不調節曆元,會使部分蔀首章首與立春日不再重合。下列表十二即是改變朔餘後,《顓頊曆》實際行用的蔀首和章首。
表十二
蔀
章
甲寅蔀
公元前336-前291
甲寅章(0)
前366-前348
癸巳章(705)
前347-前329
癸酉章(470)
前328-前310
癸醜章(235)
前309-前291
癸巳蔀
前290-234
癸巳章(0)
前290-前272
壬申章(705)
前271-前253
壬子章(470)
前252-前234
△前246
癸巳蔀
前233-前177
癸巳章(0)
前233-前215
壬申章(705)
前214-前196
△前206
壬子章(260)
前195-前177
壬辰蔀
前176-前105
壬辰章(25)
前176-前158
△前162
辛未章(705)
前157-前139
辛亥章(470)
前138-前120
辛卯章(235)
前119-前105
1.△為改變朔餘的年代。
2.由於朔餘的改變,已使原蔀章產生錯亂,參看表一和表二。
七、餘論
通過對《顓頊曆》的研究,使我們尋找解決整個古代中國曆法史的門徑,也得到了一些新的啟發。
《顓頊曆》本身是多元的,而不是單元的,就是說組成曆法的各因素並不是統一的。置閏的標誌是十一月朔旦冬至,月朔的標誌是正月朔旦立春,這兩項曆法的主要因素就不能協調如一。此外,歲首先是起於正月,後是起於十月。在《顓頊曆》的行用過程中,先後三次調節朔餘。由此可見,用太初以後的單元曆法來推斷《顓頊曆》及其以前的曆法,勢必不能得出圓滿的結果。現在有理由認為,戰國以前的曆法,諸如殷、周、春秋時期的曆法必然也是多元的。曆法的各因素必然有各自的發展過程,各因素之間的協調關係也必然比《顓頊曆》更為原始。
《顓頊曆》雖然是多元的,但組成曆法的各因素並不是孤立的和靜止的。《顓頊曆》行用的過程就是多元曆法向單元曆法的發展過程。正月歲首改成十月歲首,曆元的調節,閏章由第一式改成第二式,從曆法史上說來,都是以冬至點為標準進行的改革,都是逐步走向以十一月朔旦冬至為單一曆元,並使冬至恒定在十一月的不同發展步驟。這就是太初改曆的基礎,換句話說,《太初曆》的實行乃是《顓頊曆》發展的必然結果。因此,可以說《顓頊曆》以前是多元曆法的單項因素的發展階段,《顓頊曆》是多元曆法向單元曆法發展的過渡階段,《太初曆》則是單元曆法的完成階段。認識了這一層,對古代中國曆法史的研究,或許是不無幫助的。
為什麽在曆法發展的過程中,逐步走向以冬至為單一的標準點呢?因為隻有冬至才是實測回歸年的理想時刻。形成了以冬至為標準點的單元曆法以後,實測天象以校正曆法就成了天文曆法家的主要任務。因而它又反過來推動了對天象的觀測和研究。總之,曆法的製定基於天文學的進步,曆法在實踐中的改革和提出的要求又推動了應用天文學的發展。秦漢以來,中國天文學發展迅速,這未嚐不是一個重要原因。
注釋:
[1]《漢書·律曆誌》卷二一。
[2]清梅文鼎《曆學疑問》,見《勿庵曆算全書》、《梅氏叢書》。
[3]《續漢書·律曆誌》注引蔡邕《月令論》。
[4]1520年古稱一紀。如果配合年的幹支,三紀構成一個更大的循環周期,稱為一元。《顓頊曆》行用期間,幹支紀年法還沒有係統地形成,主要使用歲星紀年法。它和本文論述的問題,可以分開,為避免複雜化,本文盡可能不涉及紀年法上的問題。
[5]《新唐書·曆誌》中有《大衍曆議》十二篇,保存了古代曆法的有關資料,所述基本上是可信的。但它采用了經過劉歆整理的歲星超辰紀年法,並以後漢時折算的幹支紀年法為準,卻是不符合古代的實際情況的。另一方麵,又載“《顓頊曆》上元甲寅歲,正月甲寅晨初合朔立春”,即年、月、日、時都以建寅為準,也是後人理想化的結果。不足為憑。
[6]見《文物》1974年第3期。
[7]《淮南子·天文訓》“歲有餘十日,九百四十分日之八百二十七”,正是這個意思。
[8]《漢書·律曆誌》卷二一。
[9]見《文物》1976年第6期,《雲夢秦簡釋文》(一)。
[10][11]見《文物》1974年第6期。
[12]《漢書·景武昭宣元成功臣表》:“特轅侯樂……元朔元年後九月丙寅封。”元朔元年無閏,此處所記實誤。元朔元年的前一年為元光六年,元光六年在《史記》、《漢書》中有三處後九月的記載,當為閏年無疑。如果元朔元年再置閏,那就成了連續兩年置閏,而這是不可能的。《史記·建元以來侯者年表》:“(元光)六年後九月丙寅,侯樂元年。”《史記》的記載可以糾正《漢書》的錯誤。所以《漢書》中的這一條閏年資料本文表四不采。詳見本文集《<漢書>曆校辨疑》44.
[13]漢代朔日冬至,因舉行祭禮,即稱朔旦冬至。故餘分未必為零,但不超過一日。
[14]《漢書·郊祀誌》卷二五。
[15]《漢書·張蒼傳》卷四二。
[16]為了易於明瞭和便於計算,各節氣的時刻均以一日24小時為準。當時曆法上以一日為940分,可和24時折合。
[17]西漢初年記有立春資料的還有《淮南子》一書。《淮南子·天文訓》:“淮南元年冬,太一在丙子,冬至甲午,立春丙子。”清錢大昕《潛研堂文集·跋<淮南子>》卷二七、錢塘《淮南天文訓補注》都以此文有偽奪,應為己酉冬至,甲午立春。淮南元年為文帝十六年,公元前164年。本文據《元光曆譜》推算當年戊申冬至,甲午立春,見《顓頊曆表新編》表二。錢氏叔侄所推算雖不盡合,但推斷此文有誤則是。
[18]按漢《顓頊曆》節氣計算,武帝元封七年十月二十九日癸亥20時15分冬至(參看《顓頊曆表新編》表二),後移21時45分即是十一月一日甲子18時,為《殷曆》的冬至。《太初曆》以該年的十一月一日甲子0時作為曆元,和《殷曆》比較棄餘18時,即棄餘日,亦即四分之三日。昭帝元鳳年間,太史令張壽王曾根據《殷曆》指責《太初曆》說:“《太初曆》虧四分日之三,去小餘七百五分。”(《漢書·律曆誌》)這正說明各曆的節氣互有差異。
[19]參見清閻若璩《尚書古文疏證·第八十三》卷六之上,趙翼《陔餘叢考》卷十六,顧觀光《算剩初編》,汪曰楨《長術輯要》卷三。
[20]清汪曰楨《長術輯要》卷三。
[21]宋司馬光《資治通鑒》卷六從《六國年表》作七月,不作十月。又參見清顧觀光《算剩初編》。
[22]參見張家山二四七號漢墓竹簡整理小組編著《張家山漢墓竹簡》(釋文修訂本)2006年文物出版社出版、湖北省荊州市周梁玉橋遺址博物館編《關沮秦漢墓簡牘》2001年中華書局出版、王煥林著《裏耶秦簡校詁》2007年中國文聯出版社出版。
[23]漢武帝時議造《太初曆》,就曾征集民間治曆者,凡二十餘人,方士唐都,巴郡落下閎最為著稱。見《漢書·律曆誌》卷二一。
[24]此丁酉為丙申之誤,已經多位學者指出。另《漢書·高帝紀》:“(九年)夏六月乙未晦,日有食之。”《漢書·五行誌》:“(高帝)九年六月乙未晦,日有食之。”兩處記載相同。六月乙未晦,七月朔日當為丙申。可證張家山曆譜此處確誤。
(原載《雲南教育學院學報》1987年曆史專輯
2008年6月收入本文集時做了部分修改)