《漢書·律曆志》筆記(6):世經

2026-01-08
28 min read

這一部分用上面總結的三統曆算法驗算世經。這裏有幾點要提前說明:

  1. 世經所記載的距上元年數不一致。在計算時有時需要算外減一,有時不需要。這裏用的辦法是:如果所求年份在伐紂克殷 142109 之後、漢高祖元年 143025 以前,距上元年數就要算外減一,其餘年份則不用。具體理由見下面“世經所記距上元年數”部分。
  2. 世經所記與所引證的經傳有的與三統曆相合,有的不合,但是不合的是極少數,例如所引《武成》“粵若來三月”與世經所列日名不合,見“武王伐紂日名”一段。又如所引《畢命》康王十二年“六月庚午朏”,三統曆推算出是八月庚午朏(見“其他日名”一段)。

世經所記時段

世經是劉歆以三統曆排定的東漢以前年表。從五帝到夏朝,都沒有年數。世經中可考的最早年數從商湯伐桀開始,伐桀之年距上元 141480 歲,歲在大火房五度。伐桀到伐紂克殷之年之間,只有成湯崩年(即太甲元年)有歲數。從伐桀到武王伐紂克殷距上元 142109 年,總共 629 年。

武王伐紂到周康王十六年之間,用周王紀年。周昭王以後,周王年數無可考,所以從周康王十六年,伯禽薨開始到魯頃公十八年,以魯公在位年數紀年。此後到漢高祖元年(距上元 143025 年)之前,以秦王紀年。漢高祖之後到光武帝,都用漢代紀年。世經對其中這些時段的年數有明確記載,如下表:

時段 年數 始年 終年
伐桀到伐紂 629 141480 142109
伐紂到春秋隱公元年 400 142109 142509
伯禽至春秋 386 142123 142509
自春秋隱公元年到哀十四年 242 142509 142751
周凡三十六王 867 142109 142976
秦伯五世 49 142976 143025
自漢元年訖更始二年 230 143025 143254

上表中還標了每個時段的起始和終止年份,都以距上元歲數來表示。其中漢元年到更始二年其實是 $143254-143025 = 229$年,合理的解釋是包含漢元年在內的,所以加一年正好是 230。對距上元年數的討論見下一部分。

世經所記魯公在位年數與《史記·魯周公世家》《十二諸侯年表》有不一樣的地方,如下表1

魯公 世經 魯周公世家 十二諸侯年表
伯禽 46
考公 4 4
煬公 60 6
幽公 14 14
微公 50 50
厲公 37 37
獻公 50 32
慎(真)公 30 30 30
武公 2 9 10
懿公 9 9 9
柏(伯)御 11 11
孝公 27 27 38(通伯御)
惠公 46 46 46
隱公 11 11 11
桓公 18 18 18
莊公 32 32 32
愍公 2 2 2
釐公 33 33 33
文公興 18 18 18
宣公俀 18 18 18
成公黑肱 18 18 18
襄公午 31 31 31
昭公裯 32 32 32
定公宋 15 15 15
哀公將 27 27 27
悼公寧 37 37 37
元公嘉 21 21 20
穆公顯 33 33 30
恭公奮 22 22 23
康公屯 9 9 8
景公匽 29 29 28
平公叔 20 22 18
緡(文)公賈 23 23 22
頃公讎 24 24 23

世經所記距上元年數

距上元年數是世經的基礎,所有數據以及年代安排都必須以此爲基礎。但是世經所記距上元年數有不一致的地方。不說明這一點,對世經的驗算就會遇到困難。世經明確指出距上元年數有以下五處:

  • 141480: “上元至伐桀之歲,十四萬一千四百八十歲,歲在大火房五度。”
  • 142109: “上元至伐紂之歲,十四萬二千一百九歲,歲在鶉火張十三度。”
  • 142577: “釐公五年正月辛亥朔旦冬至,殷曆以為壬子,距成公七十六歲。是歲距上元十四萬二千五百七十七歲,得孟統五十三章首。”
  • 143025: “漢高祖皇帝,著紀,伐秦繼周。木生火,故為火德。天下號曰漢。距上元年十四萬三千二十五歲,歲在大棣之東井二十二度,鶉首之六度也。故漢志曰歲在大棣,名曰敦牂,太歲在午。”
  • 143127: “漢曆太初元年,距上元十四萬三千一百二十七歲。前十一月甲子朔旦冬至,歲在星紀婺女六度,故漢志曰歲名困敦,正月歲星出婺女。”

以這五個數字計算當年朔日、冬至干支,如下表:

距上元年數 入統歲數 朔日干支 冬至干支 歲次 歲所在宿 歲入宿度
141480 地統甲辰 1431 庚戌 丙辰 大火 5
142109 人統甲申 521 辛卯 己未 鶉火 13
142576 人統甲申 988 辛亥 辛亥 大火 8
142577 人統甲申 989 乙巳 丙辰 析木 13
143025 人統甲申 1437 丙辰 戊辰 鶉首 22
143127 天統甲子 0 甲子 甲子 星紀 6

可見,釐公五年距上元 142577,算出來的朔日、冬至干支與世經所載不同;而將這個年數算外減一卻能得出對的結果,但是其他年數則不用減一,就可以得出正確的朔日、冬至干支。可見世經本身體例就不一致2

這給驗算帶來了麻煩。要用三統曆驗算世經,首先就要根據世經所記載的年數排定曆譜,而曆譜中最重要的數據就是距上元年數,因爲所有計算都基於這個數據。這裏的困難在於,假如要同時照顧釐公五年與其他年數,例如太初元年的距上元年數,那在驗算時就不能用統一的算法來計算。當距上元年數是與釐公五年一樣時,就需要算外減一;當它與太初元年一樣時,就不用算外減一,而兩者的分界在哪裏,世經並沒有說。

世經還明確說:

凡伯禽至春秋,三百八十六年。
春秋。隱公,春秋即位十一年,及桓公軌立。此元年上距伐紂四百歲。

上面已經列出世經所記載的自伯禽以來魯公年數,自伯禽即位至春秋(隱公元年),凡 $46+4+60+14+50+37+50+30+2+9+11+27+46=46+4+60+14+50+37+50+30+2+9+11+27+46=386$年。後面說隱公一段很奇怪,先說隱公即位十一年,到桓公立,後面說:“此元年上距伐紂四百歲”,初看肯定以爲這個元年指的是桓公元年。但是從伯禽到隱公元年有 386 年,再加隱公在位十一年,已經有 397 年了。這樣算,那伯禽即位就是在伐紂三年後,才能算出這年距伐紂四百年。可是伯禽即位之年,世經明確指明是“成王元年正月己巳朔,此命伯禽俾侯于魯之歲也”,很明顯不是伐紂三年之後。所以錢大昕在這裏說:“‘此元年’,謂隱元年也”。只有認爲這裏的元年是隱公元年,才能與世經所記載的年數對上。從伐紂到隱公元年總共四百年,伯禽即位到隱公元年 386 年,伯禽即位在成王元年。在此之前,武王伐紂之後七年而崩,然後周公攝政七年,加起來 14 年,再加 386 年,正好是四百年3

伐紂克殷 142109 加 7 年是武王崩年 142116,再加五年爲周公攝政五年 142121。世經說這一年正月丁巳朔旦冬至,但是以 142121 驗算,所得冬至爲壬戌,如果算外減一,以 142120 驗算,所得冬至恰好是丁巳。劉操南以爲周公攝政五年這一年是 142120。如果周公攝政五年是 142120,那只有一種可能,就是武王崩之後未逾年即改元,也就是武王在位十一年,即伐紂之後七年,武王崩,周公就攝政改元。但是經史並沒有證據表示武王崩周公就攝政改元4。但是,這種解讀是有問題的,就是假如從伐紂克殷到周公攝政五年是十一年,那再加周公攝政七年剩下的兩年,那武王伐紂之後只有十三年,加上伯禽到春秋的 386 年,是 399 年而不是四百年。可見,劉操南的說法不對。這裏唯一的解釋就是這一年所用距上元年數也要算外減一,與釐公五年一樣。

所以這裏在排定曆譜時,如果所求年份在伐紂克殷 142109 之後、漢高祖元年 143025 以前,距上元年數就要算外減一,其餘年份則不用。

世經所記有朔旦冬至干支的年份有太甲元年、後九十五年、周公攝政五年、魯煬公二十四年以及之後每隔 76 年和太初元年。這些年份的冬至朔旦干支以及距上元年數如下表。用上述辦法來驗算,所得朔旦冬至干支完全相合。

紀年 距上元年數 冬至
湯沒之年 141493 商十二月乙丑
後九十五歲 141588 商十二月甲申
周公攝政五年 142121 正月丁巳
魯煬公二十四年 142197 正月丙申
微公二十六年 142273 正月乙亥
獻公十五年 142349 正月甲寅
懿公九年 142425 正月癸巳
惠公三十八年 142501 正月壬申
釐公五年 142577 正月辛亥
成公十二年 142653 正月庚寅
昭公二十年 142710 正月己丑
定公七年 142729 正月己巳
元公四年 142805 正月戊申
康公四年 142881 正月丁亥
緡公二十二年 142957 正月丙寅
漢高祖八年 143032 十一月乙巳
漢武帝元朔六年 143108 十一月甲申
漢武帝太初六年 143127 前十一月甲子
漢元帝初元二年 143184 十一月癸亥

後漢光武帝建武元年(公元 25 年),錢大昕以爲距上元 143255,距漢高祖元年(距上元 143025 年)230 年,這就是世經說的“自漢元年訖更始二年,凡二百三十歲”。

世經所記歲次

世經所記歲次有以下幾條(包括驗算得出的宿度):

紀年 距上元年數 歲在 宿度
伐桀之歲 141480 大火房五度 房 5
文王受命 142097 鶉火 房 5
伐紂克殷 142109 鶉火張十三度 張 13
釐公五年 142577 大火 氐 8
釐公十六年 142588 壽星 軫 17
釐公二十四年 142596 實沈 參 1
襄公二十八年 142687 星紀 女 4
襄公三十年 142689 娵訾 壁 9
襄公三十一年 142690 降婁 胃 3
昭公八年 142698 析木 斗 9
昭公十年 142700 玄枵 危 14
昭公三十二年 142722 星紀 斗 15
漢高祖元年 143025 鶉首之六度 井 22
漢武帝太初元年 143127 星紀婺女六度 女 6
光武建武元年 143255 鶉尾之張度 亢 7

如果所求年份在伐紂克殷 142109 之後、漢高祖元年 143025 以前,距上元年數就要算外減一,其餘年份則不用。用這種辦法驗算,除了光武建武元年之外,其餘歲次皆相合。光武建武元年,這一年歲次壽星,在亢七度。錢大昕已經指出了這處不合。

對於文王受命,這裏要多說幾句。世經說文王受命在伐紂之前十三年,那這一年距上元 142096 年,用這個數求得這一年歲在鶉首柳 2 度,而不是鶉火;但是如果以 142097 計算,這一年歲在鶉火張十度。歲次與世經所排年數矛盾,劉操南已經發現伐紂之前 13 年是 142096 而不是 142097,但計算文王受命歲次仍用 142097。又以積次計算太歲,伐紂克殷之年積次 415,太歲在辛未,而文王受命之年以 142097 計算,積次 403,太歲在己未。這些與錢大昕所算相合,可是太歲在己未距伐紂之年只有十一年,除非將己未包括在裏面。假設文王受命當年改元,到伐紂克殷之年就是文王受命十三年。所以合理的解釋應該是這裏所說的文王受命某年都是以文王受命爲元年來計算的,文王受命距上元也應該放在 142097 而不是 142096,劉操南說文王受命在 142096 不合理。

另外,襄公二十八年歲在星紀,《左傳·襄公二十八年》梓慎說:“歲在星紀,而淫於玄枵。”意思是今年歲星本來應該在星紀,但是卻在玄枵。玄枵在星紀後一次,也就是當時人所觀察到的天象比推算多走了一次,但是按照三統曆的計算,本年歲星正好在星紀而不是玄枵5

世經所記閏月

世經記載閏月有以下五處。

紀年 距上元年數 閏月
伐紂克殷 142109 閏數餘十八,正大寒中,在周二月己丑晦。明日閏月庚寅朔
文公元年 142606 閏餘十三,正小雪,閏當在十一月後,而在三月
文公六年 142611 閏餘十,無閏而置閏
襄公二十七年 142686 九月乙亥朔,是建申之月也。魯史書:“十二月乙亥朔,日有食之。”傳曰:“冬十一月乙亥朔,日有食之,於是辰在申,司曆過也,再失閏矣。”
昭公二十年 142710 正月己丑朔旦冬至,失閏

以三統曆中的推閏餘求各年的閏餘以及閏月(在伐紂之後的年份仍舊算外減一),結果如下表。伐紂克殷之年和文公元年與世經所記載的閏餘相合,閏月也一樣。

紀年 距上元年數 閏餘 閏月(自天正建子月起算)
伐紂克殷 142109 18 2
文公元年 142606 13 11
文公六年 142611 10 0
襄公二十七年 142686 3 0
昭公二十年 142710 0 0

按照三統曆,文公元年閏月應當在本年天正十一月,也就是閏十一月,而《左傳》所記則是閏三月,所以說“非禮也”。杜預說:“於曆法閏當在僖公末年”,與三統曆所算不合。文公六年閏餘 10,不到 12, 因此本年無閏月。《左傳》說:“閏月不告朔”,也就是這一年事實上是設置了閏月的,只不過未告朔而已。

襄公二十七年閏餘 3,本年無閏。《春秋》說:“冬十有二月乙亥朔,日有食之”,這年十二月朔日乙亥發生了日食;但是《左傳》說:“十一月乙亥朔,日有食之。辰在申,司歷過也,再失閏矣”,這個月斗建申,應該是夏正七月、周正九月。假如這個月的確是周正十一月,也就是夏正九月,斗建應該在戌而不是申。也就是說說今年比天象差了兩個月,所以說“再失閏矣”。假如依照《春秋》經文,日食發生在周正十二月建亥,那與建申差了三個月,不應該說“再失閏矣”。以推正月朔以及推朔日的辦法求襄公二十七年(距上元 142686,算外減一爲 142685)每月朔日如下:

月份 朔日干支 積日大餘 積日小餘
正月 戊寅 54 62
2月 戊申 24 24
3月 丁丑 53 67
4月 丁未 23 29
5月 丙子 52 72
6月 丙午 22 34
7月 乙亥 51 77
8月 乙巳 21 39
9月 乙亥 51 1
10月 甲辰 20 44
11月 甲戌 50 6
12月 癸卯 19 49

襄公二十七年乙亥朔應當是周正九月,而不是十一月,與《左傳》所記相合。

昭公二十年《左傳》:“二月己丑,日南至”,也就是這年冬至在二月己丑朔。按照三統曆,這一年距上元 142710(計算時要減一爲 142709),正月朔旦己丑,而不是二月。也就是說這一年之前少了一個閏月,所以世經說“失閏”。

世經所載日名與積日

除了朔旦冬至之外,世經還記錄了一些日名,這些日名也可以用三統曆進行驗算。

武王伐紂日名

世經對武王伐紂有詳細的記載:

師初發,以殷十一月戊子,日在析木箕七度,故傳曰:“日在析木。”是夕也,月在房五度。房為天駟,故傳曰:“月在天駟。”後三日得周正月辛卯朔,合辰在斗前一度,斗柄也,故傳曰:“辰在斗柄。”明日壬辰,晨星始見。癸巳武王始發,丙午還師,戊午度于孟津。孟津去周九百里,師行三十里,故三十一日而度。明日己未冬至,坻星與婺女伏,歷建星及牽牛,至於婺女天黿之首,故傳曰:“星在天黿。”周書武成篇:“惟一月壬辰,旁死霸,若翌日癸巳,武王乃朝步自周,于征伐紂。”序曰:“一月戊午,師度于孟津。”至庚申,二月朔日也。四日癸亥,至牧野,夜陳,甲子昧爽而合矣。故外傳曰:“王以二月癸亥夜陳。”武成篇曰:“粵若來三月,既死霸,粵五日甲子,咸劉商王紂。”是歲也,閏數餘十八,正大寒中,在周二月己丑晦。明日閏月庚寅朔。三月二日庚申驚蟄。四月己丑朔死霸。死霸,朔也。生霸,望也。是月甲辰望,乙巳,旁之。故武成篇曰:“惟四月既旁生霸,粵六日庚戌,武王燎于周廟。翌日辛亥,祀于天位。粵五日乙卯,乃以庶國祀馘于周廟。”

根據上面這段話,可以排出武王伐紂的日期與事件,如下表:

干支序數 日名 事件 月日
24 殷十一月戊子 師初發 殷十一月
27 周正月辛卯朔 後三日 周正月一日
28 明日壬辰 旁死霸 正月二日
29 癸巳 武王始發 正月三日
42 丙午 還師 正月十六
54 戊午 度于孟津 正月二十八
55 己未 冬至 正月二十九
56 庚申 二月朔日 二月一日
59 四日癸亥 至牧野,夜陳 二月四日
0 甲子 昧爽而合矣 二月五日
25 周二月己丑晦 大寒 二月三十
26 明日閏月庚寅朔 閏二月一日
56 三月二日庚申 驚蟄 三月二日
25 四月己丑朔 死霸 四月一日
40 是月甲辰 四月十六
41 乙巳 旁生霸 四月十七
46 六日庚戌 武王燎于周廟 四月二十二
47 翌日辛亥 祀于天位 四月二十三
51 粵五日乙卯 乃以庶國祀馘于周廟 四月二十七

爲了與上表對照,可以根據三統曆的推算方法計算出這一年,也就是距上元 142109 年的干支日名表,其中,所有有關的日期都用粗體表示(戊子是前一年,也就是辛卯前三天):

1 月 1辛卯 2壬辰 3癸巳 4甲午 5乙未 6丙申 7丁酉 8戊戌 9己亥 10庚子
11辛丑 12壬寅 13癸卯 14甲辰 15乙巳 16丙午 17丁未 18戊申 19己酉 20庚戌
21辛亥 22壬子 23癸丑 24甲寅 25乙卯 26丙辰 27丁巳 28戊午 29己未
2 月 1庚申 2辛酉 3壬戌 4癸亥 5甲子 6乙丑 7丙寅 8丁卯 9戊辰 10己巳
11庚午 12辛未 13壬申 14癸酉 15甲戌 16乙亥 17丙子 18丁丑 19戊寅 20己卯
21庚辰 22辛巳 23壬午 24癸未 25甲申 26乙酉 27丙戌 28丁亥 29戊子 30己丑
閏 2 月 1庚寅 2辛卯 3壬辰 4癸巳 5甲午 6乙未 7丙申 8丁酉 9戊戌 10己亥
11庚子 12辛丑 13壬寅 14癸卯 15甲辰 16乙巳 17丙午 18丁未 19戊申 20己酉
21庚戌 22辛亥 23壬子 24癸丑 25甲寅 26乙卯 27丙辰 28丁巳 29戊午
3 月 1己未 2庚申 3辛酉 4壬戌 5癸亥 6甲子 7乙丑 8丙寅 9丁卯 10戊辰
11己巳 12庚午 13辛未 14壬申 15癸酉 16甲戌 17乙亥 18丙子 19丁丑 20戊寅
21己卯 22庚辰 23辛巳 24壬午 25癸未 26甲申 27乙酉 28丙戌 29丁亥 30戊子
4 月 1己丑 2庚寅 3辛卯 4壬辰 5癸巳 6甲午 7乙未 8丙申 9丁酉 10戊戌
11己亥 12庚子 13辛丑 14壬寅 15癸卯 16甲辰 17乙巳 18丙午 19丁未 20戊申
21己酉 22庚戌 23辛亥 24壬子 25癸丑 26甲寅 27乙卯 28丙辰 29丁巳 30戊午

其中,從殷十一月戊子,師初發,再過兩天就是周正月辛卯朔,到周二月庚申朔,是一個月,再過五天就是二月五日甲子。所以世經所引武成“粵若來三月”有誤。如果算從師發總共過了多久,那就是一個月,而如果是說哪個月,那就應該是二月。李仲操認爲應該是二月之誤。王引之《經義述聞·爾雅·來懷至也》:“《召誥》‘越若來三月’……‘越若來三月’五字連讀,越若,語詞,來,至也。言越若至三月也。”如果王引之說的是對的,那就應該解釋成到了三月。戊子干支序數是 24,庚申是 56,甲子是 0,戊子到甲申之間的積日可以是 $56-24=32$ 天,也可能是 $56 + 60 - 24 = 92$ 天。如果是 92 天,那就與“三月”不矛盾,但是這又跟“四月旁生霸”矛盾。所以要解釋武王伐紂的日期,不僅要考慮干支積日、還要考慮月相。

其他日名

除了武王伐紂這年的日名之外,世經還記載了以下這些日名。按照三統曆推算這些日子的日名,與世經所載日名對照,如下表。

紀年 日名 距上元年數 月日 三統曆求得日名
周公攝政七年 乙亥 142123 2月1日 乙亥
周公攝政七年 庚寅 142123 2月16日 庚寅
周公攝政七年 乙未 142123 2月21日 乙未
周公攝政七年 甲辰 142123 3月1日 甲辰
周公攝政七年 丙午 142123 3月3日 丙午
周公攝政七年 戊辰 142123 13月29日 戊辰
成王元年 己巳 142124 1月1日 己巳
成王三十年 庚戌 142153 4月1日 庚戌
成王三十年 甲子 142153 4月15日 甲子
成王三十年 乙丑 142153 4月16日 乙丑
康王十二年 戊辰 142165 6月1日 己巳
康王十二年 庚午 142165 6月3日 辛未
釐公五年 甲午 142577 8月18日 甲午
釐公五年 丙子 142577 12月1日 丙子
文公十一年 甲子 142616 3月1日 甲子
襄公二十七年 乙亥 142686 9月1日 乙亥
襄公三十年 癸未 142689 2月24日 癸未
昭公十八年 丙子 142708 5月8日 丙子
昭公十八年 戊寅 142708 5月10日 戊寅
昭公十八年 壬午 142708 5月14日 壬午

康王十二年距上元 142165 年的兩個日名都不對。世經說:

康王十二年六月戊辰朔,三日庚午,故畢命豐刑曰:“惟十月二年六月庚午朏,王命作策豐刑。”

明確指出戊辰是康王十二年六月一日,而庚午是六月三日;而以三統曆推算,六月一日是己巳,三日是辛未。康王十二年這年的確有戊辰朔日,但是是八月,這個月三日也是庚午。由此可見,這裏應該是將八誤作了六。李銳在《漢三統術》中已經指出了這一點了。可是《尚書·畢命 》中就是“六月庚午朏”。這裏有幾種可能。一種可能是世經爲了保持與三統曆的一致,改動了經文,而現在之所以又與尚書一致,原因是後來的人不明白世經的改動邏輯,看到世經與尚書不合,又給改回去了。另一種可能是世經明知經文與三統曆推算的不合,還是引用了尚書。這兩種都沒有什麼證據,但根據奧卡姆剃刀原則,後一種可能性比前一種更大。因爲前一種有兩個假設,一是世經改動了經文,二是後來的人改動了世經;而後一種只有一個假設,就是世經沒有改動經文。兩個假設同時爲真的概率當然小於一個假設爲真的概率。

這裏順便整理一下世經裏面的月相與月日的關係。

月相 紀年 距上元年數 月日
旁死霸 伐紂 142109 正月二日壬辰
既死霸 伐紂 142109 二月五日甲子
死霸 伐紂 142109 四月一日己丑朔
伐紂 142109 四月十六日甲辰
周公攝政七年 142123 二月十六庚寅
旁生霸 伐紂 142109 四月十七乙巳
周公攝政七年 142123 三月三日丙午
康王十二年 142165 六月戊辰
哉生霸 成王三十年 142153 四月十五日甲子

世經中明確指實月相在一月中哪一天的有:

死霸,朔也。生霸,望也。
古文月采篇曰“三日曰朏”。

將這些月相按照一月日子的先後排列,就得到下面的表格:

月相 月日
死霸 朔一日
旁死霸 二日
三日
既死霸 五日
哉生霸 十五日
十五或十六日
旁生霸 十七日

襄公三十一年絳縣老人所說積日

世經在襄公三十一年有這樣一段話:

三十年歲在娵訾,三十一年歲在降婁。是歲距辛亥百一十三年,二月有癸未,上距文公十一年會于承匡之歲夏正月甲子朔凡四百四十有五甲子,奇二十日,為日二萬六千六百有六旬。故傳曰絳縣老人曰:“臣生之歲,正月甲子朔,四百四十有五甲子矣。其季於今,三之一也。”師曠曰:“郤成子會于承匡之歲也,七十三年矣。”史趙曰:“亥有二首六身,下二如身,則其日數也。”士文伯曰:“然則二萬六千六百有六旬也。”

這一段是說從文公十一年(距上元 142616 年)的夏正月甲子朔,到襄公三十年(距上元 142689 年)二月癸未,總共有 445 個甲子,而最後一個甲子只有 20 天,總共積日 $60 \times 444 + 20 = 26660$,也就是二萬六千六百日有六旬(一旬十日)。這一段話也相當凌亂。錢大昕已經指出這段話中的“是歲”指的是襄公三十年,而不是三十一年。這一點可以根據《左傳》得到驗證,因爲絳縣老人的話在《左傳》中是出現在襄公三十年而不是三十一年的。但是世經在這裏明確指出“是歲”距辛亥(也就是釐公五年正月辛亥距上元 142577 年)113 年,所以這年距上元 $142577 + 113 = 142690$,所以這裏的“是歲”一定是襄公三十一年。而且上文明確說“襄公二十七年,距辛亥百九歲……二十八年距辛亥百一十歲,歲在星紀”,二十七年到三十一年四年,109 加四年正好距辛亥 113 年,而二十八年到三十一年三年,110 加三年正好距辛亥 113 年。這些都說明世經在這裏說的“是歲”絕對是襄公三十一年,而不可能是襄公三十年。下面再通過三統曆進行驗算。

以襄公三十年距上元 142689 年驗算,因爲襄公三十年在伐紂之後,計算要算外減一,即用 142688 計算,算出來本年正月、二月的朔日干支及大小餘是:

日名 大餘 小餘
正月 辛卯 27 33
2月 庚申 56 76

庚申大餘 56,也就是干支序數是 56,而癸未干支序數 19,那癸未就是 $(60- 56) + 19 + 1 =24$(干支序數從 0 開始,所以要加一)日;而以 142689 (襄公三十一年距上元 142690)計算,二月朔日是乙卯,大餘 51,是$(60-51)+19+1=29$日,三月朔日 甲申,大餘 20,正好是二月晦日。

再算積日。襄公三十年積月 13605,積月小餘 5,文公十一年積月 12702,小餘 7;期間積月 $13605-12702 = 903$。晉國用夏正,文公十一年夏正正月是周正三月,所以要在積月中減去兩個月;到襄公三十年二月癸未,本年正月小 29 天(由正、二月積日大餘也可以看出,二月大餘 56,減正月大餘 27,正月 29 天),到二月癸未 24 天,要加 53 天。也就是:

$$ \begin{align*} &\text{襄公三十年到文公十一年夏正正月積月}\\ =&\text{襄公三十年到文公十一年積月} - 2 &\text{夏正正月是周正三月} \\ =&\text{襄公三十年積月} - \text{文公十一年積月} -2 \\ =&13605-12702 -2\\ =&901\\ &\text{襄公三十年二月癸未到文公十一年夏正正月甲子積日}\\ =&\text{襄公三十年到文公十一年夏正正月積月} \times \text{一月日長} + \text{襄公三十年到二月癸未 24 日時長}\\ =&901 \times \frac{2392}{81} + (29 + 24)&\text{襄公三十年正月小 29 天}\\ =&26660 \frac{25}{81} \end{align*} $$

算出來正好是 26660 天6

世經所載日月行度

世經所載日月行度與合晨度主要以以下這幾條:

紀年 距上元年數 日期 天象
伐紂之年 142109 殷十一月戊子 日在析木箕七度;是夕也,月在房五度
伐紂之年 142109 周正月辛卯朔 合辰在斗前一度
釐公五年 142577 冬十二月丙子 日在尾,月在策,鶉火中

武王伐紂出師之日的日月行度

師初發,以殷十一月戊子,日在析木箕七度,故傳曰:“日在析木。”是夕也,月在房五度。房為天駟,故傳曰:“月在天駟。”後三日得周正月辛卯朔,合辰在斗前一度,斗柄也,故傳曰:“辰在斗柄。”

對伐紂之年日在星度的計算有一些疑問。世經說:“殷十一月戊子,日在析木箕七度”,並沒有說在戊子的哪個時刻日在析木箕七度。根據三統曆“推合晨”,伐紂之年(距上元 142109 年)正月朔日的合晨度是 337,大餘 421,日夜半所在星度是 336 度,小餘 1409,以 1539 爲法。假如世經所說的是日夜半所在星度,殷十一月戊子是周正正月一日前三天,太陽每天運行一度,前三天夜半太陽就在 $336-3 = 333$ 度。與歲星所在星度從斗初(十二次從星紀開始)開始數不同,日月所在星度要從牽牛開始數。算出來戊子夜半日在箕 $5 \frac{1409}{1539}$ 度。錢大昕先算出殷十一月戊子的積日 190264(伐紂之年積日 190267,前三日,就是減三),再以合晨度算法計算,得出當天星度 333 度(120 頁)。李銳則先求伐紂之年正月朔日合晨度 $337 \frac{421}{1539}$,再減三天對應的三度,又減小餘 5517,得出戊子日所在星度爲 $333 \frac{1409}{1539}$。333 度從牽牛初度算起到箕宿是 5 度,因爲牽牛初度到箕宿累計 328 度,333 減去 328 應該是 5 度,又根據三統曆“推合晨所在星”,這個數值要算外,加一。也就是戊子這一天太陽在箕宿 $6 \frac{1409}{1539}$ 度。(劉操南說此條“疑有誤”,也沒說誤在哪裏。)

這裏討論一下合晨度的問題。從錢大昕、李銳起,都遵循三統曆所說,合晨度從牽牛起算都要“算外”加一;但《中國古代曆法》和劉洪濤(34 頁)都沒有加一。這裏恐怕涉及到古人對度的理解。古人對度數與現代人的理解不同,古人的度是一個範圍,而現代人的度則是一個點(中國古代曆法 289 頁)。

再算戊子日月所在星度。伐紂之年正月辛卯朔合晨度 $337 \frac{421}{1539}$,這天夜半月在 $332 \frac{750}{1539}$。戊子日距離辛卯三日,戊子日之夕就是戊子日的晚上,距離辛卯兩天多。月亮每天行 $13 \frac{7}{19}$(見“推其月夜半所在星”)。辛卯日合晨度減去月亮兩天的行度就是:

$$ \begin{align*} &\text{辛卯朔合晨度}-\text{戊子夕到辛卯朔月亮行度}\\ =&332 \frac{750}{1539} - 2 \times 13 \frac{7}{19}\\ =&\frac{332 \times 1539 + 750}{1539} - \frac{2 \times 13 \times 19 \times 81 + 2 \times 7 \times 81}{19 \times 81}\\ =&\frac{477916}{1539}\\ =&305 \frac{1155}{1539} \end{align*} $$

305 度從牽牛初度算起,是心宿 1 度,戊子日的傍晚(“是夕”,《說文》:“夕,莫也。”“莫,日且冥也。”)距離夜半還有幾個小時,所以這天傍晚月亮應該還沒走到心宿,心前一個星宿是房宿,所以傍晚月亮在房宿。這就是世經說的:“是夕也,月在房五度。房為天駟,故傳曰:月在天駟。”

伐紂之年正月朔合晨度 $337 \frac{421}{1539}$ 度,從牽牛初度起算,算外加一,爲箕 10 度。箕總共 11 度,下一宿爲斗,也就是這天合晨距斗一度,所以世經說:“合辰在斗前一度”。

釐公五年晉侯滅虢之日的日月行度

除了伐紂出師這天的天象,世經還記載了釐公五年(距上元 142577 年)十二月丙子的合晨度和日月所在星度。世經說:

釐公五年正月辛亥朔旦冬至,殷曆以為壬子,距成公七十六歲。
是歲距上元十四萬二千五百七十七歲,得孟統五十三章首。故傳曰:“五年春王正月辛亥朔,日南至。”
“八月甲午,晉侯圍上陽。”章謠云:“丙子之辰,龍尾伏辰,袀服振振,取虢之旂。鶉之賁賁,天策焞焞,火中成軍,虢公其奔。”卜偃曰:“其九月十月之交乎?丙子旦,日在尾,月在策,鶉火中,必是時也。”冬十二月丙子滅虢。

這一段說的是晉侯滅虢那天的天象。童謠8中說的“丙子之辰,龍尾伏辰”,意思是丙子這天日月合朔時,日月在尾宿。“鶉之賁賁,天策焞焞,火中成軍”按照杜預的解釋,意思是“南方鶉鳥之星,其體賁賁然見於南方。天策之星近日,焞焞然無光耀,甚微也。鶉火之次正中於南方,爾時其當成軍事也。”這裏提到的星有鶉、天策、火。正義說:“南方七宿皆爲朱鳥之宿”,也就是說“鶉之賁賁”中的鶉是指南方井、鬼、柳、星、張翼軫鶉鳥七宿。這七宿在十二次中對應鶉首、鶉火、鶉尾三次。鶉火,正義說是“柳星張也”,就是柳、星、張三宿。天策則是箕宿。《正義》又說:“天策,傅說星,史記天官書之文”,查《天官書》,沒有這一句。但是傅說化爲箕星,是先秦著名的傳說,見《莊子·大宗師》。這幾句對應的天象就是釐公五年十二月丙子朔這天,合朔在尾宿,所以尾宿伏,看不見;天策,也就是箕宿,也黯淡無光。“火中成軍”,指的是當天早上日出之前鶉火出現在正南方,正是滅虢的軍隊集結的時候。卜偃解釋說:“丙子旦,日在尾,月在策,鶉火中”。總結一下,這天的天象有以下幾條:

  1. 日月合朔在尾,箕宿黯淡
  2. 日出時,日在尾宿
  3. 日出時,月在箕宿(天策)
  4. 日出時,鶉火出現在正南方

要驗算這些天象,首先先計算釐公五年十二月丙子的合晨度,也就是日月合朔所在星度。釐公五年十二月丙子正好是十二月一日,也就是日月合朔的日子。周十二月是夏十月,十二月朔就是九月、十月之交,所以卜偃說“其九月、十月之交乎?”。這個月丙子朔無小餘。要算這天的積日只要先求釐公六年正月朔日積日,再減去釐公五年十二月的日數就可以了。釐公六年正月朔日積日 361221,釐公五年十二月小 29 天,釐公五年十二年丙子積日 $361221 - 29 = 361192$。求丙子日的合晨度只要用積日就可以了,因爲當日小餘爲 0。丙子日合晨度爲 $324 \frac{1292}{1539}$ 度,由牽牛初度起算,在尾 15 度。十二月丙子日合朔在尾 15 度,這也就是世經中童謠所說的“丙子之辰,龍尾伏辰”(《左傳·僖公五年》)。《左傳正義》說:“在尾十四度”,錢大昕以爲“疑誤”,其實很可能是孔穎達在換算的時候沒有考慮到由牽牛初度起需要算外,所以度數需要加一。

當天沒有小餘,日月夜半所在星度與合晨度是一樣的9。箕宿就在尾宿之後,日月合朔在尾,那箕宿就肯定黯淡無光。

太陽每天運行一度,假設從夜半到日出有六個小時,在這六小時中日行 $\frac{1}{4}$ 度,所以日出時,日還在尾。月亮一天運行 $13 \frac{7}{19}$ 度,六小時就運行 $13 \frac{7}{19} \times \frac{1}{4} = \frac{254}{76} = 3 \frac{26}{76}$,就是三度多。尾總共十八度,月夜半在尾 15 度,日出時候月亮正好運行到箕宿,所以說“月在策”。

“鶉火中”是日出時,鶉火的柳心張三宿出現在正南方。這種天象跟恆星年有關。正義引《月令》說:“孟冬之月,日在尾,昏危中,旦七星中。”七星就是星宿,所以這天日出鶉火在正南方。

世經所載五星行度

世經所載五星行度只有伐紂之年水星行度一處:

紀年 距上元年數 日期 天象
伐紂之年 142109 正月二日壬辰 晨星始見
伐紂之年 142109 正月二十九己未 冬至,晨星與婺女伏,歷建星及牽牛,至於婺女天黿之首

晨星是水星,古人將水星稱作辰(見左傳襄公二十八年正義)。這裏晨通辰,與合晨度中的晨一樣。這裏詳細記錄了水星從夕始見到伏的時間和所在星次。其中婺女就是女宿,牽牛就是牛宿。建星、天黿需要解釋一下。

《國語·周語下·景王問鍾律於伶州鳩》:“我姬氏出自天黿,及析木者,有建星及牽牛焉”,韋昭注說:“天黿,即玄枵……從斗一度至十一度,分屬析木,日辰所在也。建星在牽牛閒,謂從辰星所在。須女,天黿之首。”根據韋昭的注,這裏所說的建星在牽牛中,天黿就是十二次中的玄枵。玄枵起于婺女八度,所以女宿是玄枵這一次的起點。所以這裏所記載的水星運行情況就是:

  1. 伐紂之年正月二日壬辰,水星開始出現
  2. 26 天之後(從正月三日開始數),正月 29 日己未,水星隱伏不見。水星伏的位置在女宿,而這次水星出現到伏經過的星宿有建星、牽牛,一直到婺女,也就是玄枵的起始點。

要驗證水星的運行情況,首先要求水星始見的時間和所在星次,然後需要基於水星始見的情況,根據“推五步”來推算水星在始見之後的運行情況。

水星歲數 9216,見中法 29041。由紀術可以推算出有關水星始見的結果如下:

  1. 推見復:定見復數爲 447806,見復餘爲 7373,見復爲 1
  2. 推星見中次:今年水星出現在處暑,在十二次的位置是鶉尾
  3. 推星見月:水星出現在十月
  4. 推至日:這年處暑的干支是丁巳
  5. 推朔日:本月朔日干支是壬戌
  6. 推入月日:星見在本月 25 日,本月朔日壬戌,25 日是丙戌

推見復求得見復爲 1,也就是水星會在本年出現,但是要注意,這裏的本年不是伐紂之年,而是伐紂之前一年。水星出現在伐紂之前一年十月 25 日丙戌,出現位置是鶉尾。

根據五步,水星晨見先逆行 1 天,再留 2 天,順行 7 天,順行疾 18 天,伏 $37 \frac{122029605}{134082297}$,從晨始見到始伏的總日數爲 $65 \frac{122029605}{134082297}$ 日,也就是從晨始見到夕始見之間間隔 65 天多,將近 66 天。從 10 月 25 日數第 66 天正好到第二年正月二日壬辰,所以世經說:“壬辰,晨星始見”。

水星晨始見到伏,總共運行 $96 \frac{46610128}{134082297}$ 度。由軫 11 度數 96 度到斗 15 度,也就是水星始伏在斗 15 度。

水星從夕始見到再次伏總共經過 26 天。從正月二日壬辰數 26 天正好到正月 29 日,水星再次隱伏不見。水星夕始見之後順行 $16 \frac{1}{2}$ 天,每天行 $1 \frac{1}{3}$ 度;然後順行遲 7 天,每天行 $\frac{6}{7}$ 度;繼而留一天半,運行度數爲 0;最後逆行一天,行 2 度。這 26 天多總共運行 $26 \frac{2}{3}$ :

$$16 \frac{1}{2} \times 1 \frac{1}{3} + 7 \times \frac{6}{7} + 2 = 26 \frac{2}{3}$$

由斗 15 度再加 26 度,就到女宿 7 度。也就是說水星再次伏的位置在女宿,也就是玄枵的起點。這些都與世經所記載的相合。


  1. 《十二諸侯年表》只到春秋終,即哀公十七年,並說哀公總共 27 年。哀公以下年數見《六國年表》。 ↩︎

  2. 劉操南在《古代天文曆法釋證》裏說釐公五年:“言距算外所求年,當作 142576”,意思恐怕是世經凡言“距”上元就要算外,但是看上面所引世經原文,世經並沒有這樣的體例。 ↩︎

  3. 這裏也有問題。按照世經所說,周公攝政七年,沒有以成王紀年,直到周公歸政成王之後,纔開始用成王紀年。可是《史記·魯周公世家》:“成王七年二月乙未,王朝步自周,至豐,使太保召公先之雒相土。其三月,周公往營成周雒邑”,則是周公攝政時,已經用成王紀年。 ↩︎

  4. 《史記·周本紀》:“武王病。天下未集,羣公懼,穆卜,周公乃祓齋,自爲質,欲代武王,武王有瘳。後而崩”,《集解》引皇甫謐說:“武王定位元年歲在乙酉,六年庚寅崩。”也就是武王伐紂之後六年就死了。王國維在《周開國年表》中認爲武王克殷二年之後就死了,根據是《史記》在武王崩年沒有指明是哪年,而上文最近的明確有紀年的是武王二年。這個證據不太可信。 ↩︎

  5. 左傳正義也以三統術對這年的歲次進行了推算,所用距上元年數是“此年距上元積十四萬二千六百八十六歲”。世經明確記載釐公五年距上元 142577 年,這年朔旦冬至是辛亥;在襄公二十八年又說:“二十八年距辛亥百一十歲,歲在星紀”,所以襄公二十八年距上元一定是 $142577 + 110=142687$ 年。這也爲上面所說的從伐紂到漢高祖期間上元歲數要減一增添了一條新證據。 ↩︎

  6. 郜積意在《〈世經〉三統術與劉歆〈春秋〉學》(見《兩漢經學的曆術背景》 111 頁)中的計算是:“襄公三十年距文公十一年,積月共 $902 \frac{17}{19}$,除去文公十一年周正正月、二月共 59 日,加襄公三十年之正月及二月二十四日(共 53 日),則積日 29958”。按,積月 902 積日爲 $902 \times \frac{2392}{81} = 26636 \frac{68}{81}$,減去 59 天、加上 53 天,就是減去 6 天,得到 26630 天,不是 29958,不知道他怎麼算的。另外,他所算的積月是將襄公三十年積月連帶小餘減去文公十一年的積月與小餘,所以得出$902 \frac{17}{19}$的值。但是在算這兩年之間總共有多少個月時,不應該減去積月小餘。換一種辦法算,從文公十一年 142616 到襄公三十年 142689 總共 73 年;又由推閏餘算出這 73 年間總共 27 年有閏月,也就是這 73 年總共 $73 \times 12 + 27 = 903$個月,而不是$902 \frac{17}{19}$。郜積意的算法是錯誤的。基於錯誤的計算,他得出了劉歆三統曆的計算和左傳記載不符的錯誤結論。 ↩︎

  7. 以 19 乘以積日小餘 29,也就是要從合晨度中減去的合晨時刻距夜半小餘。 ↩︎

  8. 左傳作童謠,世經中寫作章謠應該是誤字。 ↩︎

  9. 因爲要計算日月夜半所在星度,只要在合晨度上減去積日小餘與日月每日行度的乘積。當積日小餘等於零的時候,就相對於合晨度減去零,還是等於合晨度。 ↩︎