《漢書·律曆志》筆記(1):中國傳統曆法的特點與《漢書·律曆志》的主要內容

2025-12-24
11 min read

中國傳統曆法的特點

中國傳統曆法有以下這些主要特點:

  1. 用干支記錄日期
  2. 以朔望月來確定月份
  3. 以朔望月與回歸年的配合來確定一年的長度,也就是在哪些年份設置閏月,閏月設置在哪個月份
  4. 除了年月日之外,還有完全由回歸年決定的二十四節氣
  5. 除了編算年月日、節氣之外,還要推算五大行星的運行

以下就對這些特點進行詳細說明。

曆法的用處就是記錄時間。在地球上生活,最容易注意到的就是太陽的東昇西落。太陽升起一次、落下一次就是一天。月亮每隔一些天數就會由圓變缺、由缺變圓。在更長一點的時段,天氣會由寒轉暖、又由暖變冷。這些自然現象所展現的週期爲曆法提供了最基本的單位,也就是日、月、年。古人在持久的仔細觀測後,發現月亮由圓變缺的週期是大致固定的,大約是 29 天多。而天氣冷暖變遷的週期也大致是固定的,大約是 365 天。因此,將日子以月份(29 天)組織起來,過幾個月的長度就接近一年。但是問題在於,設置十二個月的日數不足一年($12 \times 29 = 348$),而設置十三個月的日數又超過一年($13 \times 29=377$)。因此,有的古代文明就設置十二個整月,而將多出來的幾天單獨處理。假設一年固定 365 天,一個月 29 天,那十二個月之後,一年還剩 $365 - 12 \times 29 = 17$,這剩下的幾天就是單獨的一個月。例如,古埃及的曆法,每個月 30 天,一年 365 天,每十二個月之後又會增加 5 天。這五天叫做 epagomenœ,就是增加的日子1

另外一種辦法是不固定每年的日數,每過幾年增加一個閏月。假設將一年分爲十二個月,每個月 29 天,每過一年就多 $365 - 12 \times 29 = 17$,兩年之後,多出來的日子就有 $17 \times 2=34$ 天,就可以多設置一個月,來安置多出來的這些日子。在日復一日的觀測之後,古人發現月亮盈虧和冷暖交替有一個大致的週期,大約 19 個整年之中有 235 次完整的月亮週期。中國古代將之稱爲一章,而古希臘人將之稱爲 Metonic cycle,以發現這一週期的古希臘數學家 Meton of Athens 命名。以此爲基礎,就可以在十九年之中設置七個閏月,也就是 $235 - 12 * 19 = 7$。這就叫十九年七閏,中國早期的太初曆、三統曆都以這一週期爲基礎計算曆法。

一天雖然能很好地與日出、日落對應,但是何時爲一天的開始,卻沒有一個客觀的標準,或者說,一天從任何一個時間點開始都一樣。但是在古代計時還很原始,如果隨意選擇一個時刻爲一天的開始,那如何保證每天的開始都是在同一時刻呢?與此相應,每天日出和日落的時間是大致可以確定的。有些曆法就以日出(印度教曆法)或日落(希伯來曆法)爲一天的開始2。中國傳統曆法則以午夜爲一天的開始,稱之爲“夜半”。

同樣地,一個月的開始也可以隨意設置,既可以是月亮最圓的那天,也可以是月亮最缺的那天。而中國傳統曆法以日月合朔爲一個月的開始。在這一天,月亮與太陽在天球上處在同一經度,在地球上月亮幾乎不可見。這天叫做“朔”,這就是合朔一詞的原由。月亮最圓的時候出現在每月的第十五或第十六天,第十五天叫做“望”。所以以月相爲基礎的一個月叫做“朔望月”。

一年的開始也沒有客觀的標準。中國古代有三正的說法。三正分別指夏正、殷正、周正。夏商周三代以不同的月份爲一年的起點,所以叫做三正。在夜晚的天空中,北斗七星很引人注意,而且在古代中國所處的地區,北斗七星一年四季都在天空。但是由於地球繞着太陽轉的週期與地球相對於遙遠恆星的旋轉週期的差距(也就是恆星年和回歸年的差距),星座在一年四季的位置是不同的。就北斗七星而言,不同季節一天相同時刻斗柄的指向就會不同3。《鶡冠子》說:“斗柄東指,天下皆春,斗柄南指,天下皆夏,斗柄西指,天下皆秋,斗柄北指,天下皆冬。”古人將斗柄的指向與地支相配合。斗柄指向東偏北方的時候就是現在的農曆正月,對應地支的寅,夏以此爲正月,叫做“建寅”;指向北偏東的時候是農曆十二月,殷以此爲正月,叫建丑;指向正北方的時候在農曆十一月,周以此爲正月,叫建子。下面的圖就展示了北斗七星的指向與夏正月份的關係。

斗建方位與夏正月份對照圖

三正 斗柄指向 地支/斗建 農曆月份
夏正 東偏北 建寅 正月
殷正 北偏東 建丑 十二月
周正 正北 建子 十一月
中國古代是用干支來紀日的。十天干、十二地支相互組合,可以形成從甲子到癸亥、週期爲六十的天干地支序列,見下表。古人就以六十干支來紀日,每六十天一次循環。每個日子都有對應的干支名稱,叫做日名。一月 29 天、一年三百多天,都不是六十的整數倍。所以干支紀日是相對獨立於月份和年份的。現代的格里高利曆,每月第一天都是一號,而每年第一天都是一月一日。但是以干支紀日,假設第一年的第一天是甲子,一個月 29 天之後第二個月第一天的干支的序號就是 30,對應癸巳(注意,下面的干支表是以 0 爲開始的)。那過六十天之後又要開始一個週期。一年 365 天,有六個干支週期,又多出五天。所以第二年第一天是己巳。這也就是中國曆法要計算特定日期的干支日名的原因。

六十干支表

0 甲子 10 甲戌 20 甲申 30 甲午 40 甲辰 50 甲寅
1 乙丑 11 乙亥 21 乙酉 31 乙未 41 乙巳 51 乙卯
2 丙寅 12 丙子 22 丙戌 32 丙申 42 丙午 52 丙辰
3 丁卯 13 丁丑 23 丁亥 33 丁酉 43 丁未 53 丁巳
4 戊辰 14 戊寅 24 戊子 34 戊戌 44 戊申 54 戊午
5 己巳 15 己卯 25 己丑 35 己亥 45 己酉 55 己未
6 庚午 16 庚辰 26 庚寅 36 庚子 46 庚戌 56 庚申
7 辛未 17 辛巳 27 辛卯 37 辛丑 47 辛亥 57 辛酉
8 壬申 18 壬午 28 壬辰 38 壬寅 48 壬子 58 壬戌
9 癸酉 19 癸未 29 癸巳 39 癸卯 49 癸丑 59 癸亥
光計算日期的干支日名還不夠,月份也需要計算。前面已經說過,中國傳統曆法十九年中有七個閏月,如何決定一年有沒有閏月、有閏月又應該放在哪個月,這也是需要計算的。在春秋時期,閏月是放在十二個月之後的,也就是“歸餘於終”(《左傳·文公元年》)。但是到了漢代,已經確定了閏月是設置於沒有中氣的月份的規則。但是,何謂中氣呢?

二十四節氣,以冬至爲起始

21 立冬 3 立春 9 立夏 15 立秋
22 小雪 4 驚蟄 10 小滿 16 處暑
23 大雪 5 雨水 11 芒種 17 白露
0 冬至 6 春分 12 夏至 18 秋分
1 小寒 7 穀雨 13 小暑 19 寒露
2 大寒 8 清明 14 大暑 20 霜降

中國傳統曆法雖然以朔望月確定月份,但是另一方面又要配合太陽的週期。太陽經過春分點,季節進入春季,是春耕的關鍵時期;太陽到達冬至點,是一年夜晚最長的一天。這些時間點對於農業活動都非常重要。所以爲了安排農事,中國傳統曆法還將一年分爲二十四節氣,而二十四節氣完全是按照太陽的運行決定的,從本質上來說是一種太陽曆。這二十四個節氣,傳統曆法將它們分爲中氣和節氣,例如冬至是中氣,那下一個節氣小寒就是節氣,再下一個節氣大寒又是中氣。一年二十四節氣,其中十二個中氣、十二個節氣。對節氣的推算完全是根據太陽運行的週期來的,也就是完全根據回歸年的長度。將一個回歸年平均分爲二十四份,每一份就是一個節氣的長度;將回歸年分爲十二份,每一份就是一個節氣的長度。那麼,既然十二個朔望月的長度不到一年,而十二個中氣加起來恰好是一年,一個中氣就比一月略長。假設月份和節氣同時開始,一月結束時,中氣就會比月份多出一段。當這一段多出的時間不斷累積,達到一個月的長度的時候,就是需要設置閏月的時候。

月份、中氣長度對照圖

上面這張圖展示了三年之中中氣相對於月份的位置。圖中位置都是按照三統曆的數值計算出來的。粉紅色的點是月份的位置,藍色的點是中氣的位置。一個月的長度是 1,而一個中氣的長度是 $\frac{235}{228} = 1.0307$,所以第一年第一個月過後中氣的位置比月份稍後。一年過後,中氣比月份顯著多出一段。也就是說,中氣的位置逐漸從月初轉向月中、月末。到了第三年九月4,中氣出現在九月底,而下一個中氣出現在十一月初,也就是本年十月沒有中氣。因此,本年需要閏九月。

這也就是說,中國傳統曆法不僅要計算特定年份相對於曆法起點過了多少天(用以確定特定日子的干支日名),還需要確定哪些年份有閏月,如果有閏月的話,閏月在哪個月;而對閏月的計算又涉及到對節氣的推算。這些是中國傳統曆法計算的主要部分。這一部分在《律曆志》中稱作“統術”,而與這部分的推算相關的常數叫做“統母”。

但是,除了對年月日的計算之外,中國傳統曆法還有其他的任務,就是對天體運行的計算。例如,每隔一段時間,就會發生月食。計算哪個月會發生月食,也是傳統曆法的內容。不僅如此,傳統曆法還需要推算水星、金星、火星、木星、土星五大行星的位置和出現時間等信息。五大行星中最重要的是木星。在春秋時期,古人就已經發現木星的週期大約是十二年,因此古人將天空平均分爲十二個區域。當某年木星運行到哪個區域時,就以這個天區來給當年命名。因爲古人把在一個地方停留超過兩夜叫做“次”5,所以木星停留在一個天區就叫“一次”,而十二個天區就稱爲十二次。下面的表格就是《漢書·律曆志》中給出的十二次的名稱,與每次的起始度數、終到度數、總度數,都以二十八宿爲參考。因爲先秦的人有以木星所在次來紀年的辦法,所以爲了確定所說的具體是哪一年就需要對木星的位置進行推算。劉歆已經發現了木星的週期不到十二年,大約每十二個週期就會多走一個星次。現代發現木星週期大約是 11.86 年,每十二個週期 $12 \times 11.86 = 142.32$,比 12 年一個週期少了一次多 $12 \times 12 = 144 - 142.32 = 1.68$。所以劉歆發明了“歲星超辰”的辦法,木星每走十二個週期,就會在十二次中跳一個,多走一次。這就是《律曆志》“歲術”部分推算的內容。

十二次 初度數 終度數 總度數
0 星紀 初斗十二度 終於婺女七度 $30\frac{1}{4}$
1 玄枵 初婺女八度 終於危十五度 30
2 諏訾 初危十六度 終於奎四度 31
3 降婁 初奎五度 終於胃六度 30
4 大梁 初胃七度 終於畢十一度 30
5 實沈 初畢十二度 終於井十五度 31
6 鶉首 初井十六度 終於柳八度 30
7 鶉火 初柳九度 終於張十七度 31
8 鶉尾 初張十八度 終於軫十一度 30
9 壽星 初軫十二度 終於氐四度 31
10 大火 初氐五度 終於尾九度 30
11 析木 初尾十度 終於斗十一度 31

除了木星在特定年份出現在哪個天區,傳統曆法還要計算木星何時出現,以及出現的具體位置,也包括其他四大行星的出現時間、位置等信息。對這些內容的計算對應《律曆志》中的“紀術”部分,而與這些計算有關的常數則叫做“紀母”6

因爲曆法既要推算年月日,又要推算五大行星的運行,所以傳統曆法設置了上元。簡單來說,上元就是日月和五大行星週期的最小公倍數。太極上元與統母、紀母這些在曆法計算中最基本的常數都會在“基本數據與表格”部分進行介紹。

《漢書·律曆志》主要內容

《漢書·律曆志》分爲上下兩卷,上卷分爲兩個部分,第一部分又分爲五個小部分,備數、和聲、審度、嘉量、權衡,講數和律呂、度量權衡的相生關係;第二部分講曆數自上古到太初改曆,下及劉歆作《三統曆》的歷史演變,並且說明曆書中所用的重要數字與天道人事的關係。下卷分爲統母,講三統曆所用的重要參數;紀母,推步五星的基本數據;五步,五星運行的基本軌跡與度數;統術,三統曆的基本原理;紀術,推步五星的基本原理;歲術,計算歲星位置的方法;世經,用三統曆推算出的自太昊帝以來的年曆。爲了看起來清楚,以下將《律曆志》主要內容寫成列表。

  • 上卷:
    • 第一部分:以律起曆
      • 備數
      • 和聲
      • 審度
      • 嘉量
      • 權衡
    • 第二部分:曆法沿革
      • 自“曆數之起上矣”至“至孝成世,劉向總六曆,列是非,作五紀論” :
        • 從顓頊至漢成帝的曆法沿革
      • 自“向子歆究其微眇,作三統曆及譜以說春秋,推法密要,故述焉。”至上卷末尾:
        • 三統曆撰作目的與基本數據
  • 下卷:
    • 統母:日月運行的參數
    • 紀母:五星運行的基本數據
    • 五步:五星運行的基本軌跡與度數
    • 統術:如何推算三統曆日名、置閏、節氣、日月運行等
    • 紀術:推步五星的基本算法
    • 歲術:計算歲星位置的方法
    • 世經:用三統曆推算出的自太昊帝以來的年曆

  1. R. A. Parker, The Calendars of Ancient Egypt, University of Chicago Press, Chicago, 1950. ↩︎

  2. Calendrical Calculations 第14 頁的各種曆法紀日對照圖。 ↩︎

  3. 古人認爲北斗七星的形狀像斗,斗是一種長柄的舀水器,也寫作枓。《史記·趙世家》趙襄子請代王吃飯的時候,就暗中命令廚人用斗柄擊殺代王。由此可知,斗的柄一定相當長,不然無法用來殺人。斗的容水部分叫做“魁”,而柄叫做“杓”(biāo,甫遙切)。《史記·天官書》索隱引春秋運斗樞云“斗,第一天樞,第二旋,第三璣,第四權,第五衡,第六開陽,第七搖光。第一至第四爲魁,第五至第七爲標,合而爲斗。” ↩︎

  4. 注意,圖中標記月份的數字都是標在月底。例如,圖中標一月的位置是一月的結束、二月的開始。 ↩︎

  5. 《左傳·莊公三年》:“一宿爲舍,再宿爲信,過信爲次。”也就是說,住一夜叫舍,住兩夜叫信,住兩夜以上叫次。木星在一個天區會停留一年左右,時間比較長,所以叫次。而其他恆星則將天空分爲二十八個天區,稱之爲二十八宿,因爲日、月在每個天區停留的時間較爲短暫,所以稱之爲宿或舍。古代也有將二十八宿稱作二十八舍的叫法。 ↩︎

  6. 今本誤作統母,李銳在《三統術注》中認爲應該是紀母。統母是與統術相應的常數,那與紀術相應的常數也應該是紀母,而不是統母。 ↩︎