春 秋 魯 國 曆 法 的 復 原 方 法

初稿: 2019年3月


遠古時期,中國的曆法根據觀測天象而制定,到了春秋時期(公元前722年–前481年),人們初步掌握了計算月相的方法,開始推步曆法。春秋時期各國施行不同曆法,可惜這些曆法全部散失,現在我們只能從《春秋》這部由孔子修訂的魯國編年史書中獲得當時魯國施行曆法的不完整資料,這裡稱當時魯國的曆法為春秋曆。

本網頁介紹春秋曆的一個復原方法,這方法是根據張培瑜、陳美東、薄樹人和胡鐵珠著的《中国古代历法》(中国科学出版社‧北京‧2008年3月)書中第三章第五節的資料。該書的前言說書中各章節由四人分別執筆,第三章由張培瑜撰寫。張培瑜是中國科學院紫金山天文臺的研究員。


內容

  1. 合 朔 計 算
  2. 閏 月 和 積 月
  3. 《中 国 古 代 历 法》表 3-7 勘 誤
  4. 春 秋 曆 的 閏 月 和 正 月 月 建
  5. 復 原 的 春 秋 曆 法 是 否 可 信 ?
  6. 儒 略 日 數
   備 註

合 朔 計 算

根據張培瑜的考證,春秋曆的朔策(即朔望月)在29.5306703日和29.5306755日之間,計算時可用30328/1027日 = (29 + 545/1027)日 = 29.53067186日。此朔策與當時的朔望月平均值(29.530583日)頗為接近,比戰國時代古六曆的朔策(29+499/940)更準,累積九百年才會有一日之差。唐朝以前的曆法都以平朔法計算合朔時刻,即假太陽和設月球以均勻的速度在天空運行。所以只要知道了其中一個合朔時刻,其他合朔時刻只須加上朔策的整數倍即可求得。

根據張培瑜的春秋曆還原法,春秋曆推算魯隱公元年(公元前722年)正月初一的朔日在冬至之後的第一個辛巳日,合朔時刻離辛巳日子正(即午夜零時)有268/1027日。用公曆和現在的時間系統表示,這個推算時刻是公元前722年1月16日06:16。當時不知道各地有各自地方時,所以這時刻可視為魯國當地(山東曲阜)的地方時。古代計算不用十進制小數,日的小數部分(奇零)以分數表示稱為小餘。因此268/1027就是這個朔的小餘,由於此朔對應正月初一,可稱為正朔小餘。小餘也可視為合朔在當日的時間以日的分數表示,用現行的24小時制,小餘268/1027就是6:15:46(6時15分46秒)。根據平朔法,下一個合朔時刻離辛巳日子正有(268/1027 + 29 + 545/1027)日=(29 + 813/1027)日,所以二月朔離辛巳日子正的日數是29、小餘813,此後提及小餘時略去分母1027。用同餘算術很容易求得二月初一的日干支:天干十日一週期,29 = 30 - 1,所以辛巳日29日後的日干是辛之前的天干,即庚;地支十二日一週期,29除以12餘5,巳之後的第五個地支是戌;所以二月初一的日干支是庚戌。公曆日期也容易計算:1月(16+29)日 = 2月(16+29-31)日 = 2月14日。

春秋曆的合朔時刻可用以下公式表示:

Mi = M0 + i (29 + 545/1027)日     (1)

此處M0是某一合朔時刻,可以定為魯隱公元年的正月朔時刻,i是從M0算起的朔望月數。

為方便成見,此處用NY表示正月初一最接近公曆Y年1月1日的春秋曆年份。例如N-721指魯隱公元年,始於公元-721年(即前722年)1月16日、終於-720年1月4日。如果知道了從魯隱公元年的正月到某春秋曆年Ny正月的累積月數A(y),則Ny正月合朔時刻Z(y)是

Z(y) = M0 + A(y) (29 + 545/1027)日    (2)

只要知道積月A(y),春秋曆年Ny的正月初一便求得,Ny的其他月份也可輕易計算。積月A(y)可用遞歸公式計算:如果Ny沒有閏月,則Ny+1正月的積月是A(y+1)=A(y)+12;如果Ny有閏月,則Ny+1正月的積月是A(y+1)=A(y)+13。按定義A(-721)=0,所以如果知道春秋曆所有的閏月資料就可以計算各年的日曆。


閏 月 和 積 月

春秋曆並沒有固定的置閏法則,當時是靠觀測天象與日曆的差異來決定該年是否要設閏月,春秋曆的閏月情況現在只能從《春秋》書中的日期記載推斷。張培瑜根據前人和自己的研究制定了春秋曆各年的正朔表,載於《中国古代历法》表3-7。表中載有作者還原春秋曆的正月月建、正朔日干支、正朔小餘和冬至日期,此外還列出清末曆算家王韜《朔閏日至考》的春秋曆正朔以資比較。比較表中的正朔日干支可推出該年是否有閏月,但這樣做比較費時,較簡單的方法是比較表中列出的正朔小餘。

如前述,正朔小餘是正月合朔離朔日子正的時間用分數日來表示,其中基數(即分母)1027往往略去。如果Ny沒有閏月,Ny的正朔小餘K(y)與下一年Ny+1的正朔小餘K(y+1)有以下關係:
K(y+1) = mod(K(y) + 12×545, 1027) = mod(K(y) + 378, 1027)    (3)
如果Ny有閏月,則
K(y+1) = mod(K(y) + 13×545, 1027) = mod(K(y) - 104, 1027)    (4)

這裡mod(X, Y)指X除以Y後所得之餘數。利用這兩條公式來比較表中的正朔小餘,便可輕易推出該年是否有閏月,然後用A(y)的遞歸公式算出春秋曆各年的積月。下表給出計算結果,帶有星號的春秋曆年表示該年有閏月,表中還列出正月月建、正朔日干支、正朔公曆日期和正朔小餘。


春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
N-721 0 辛巳 公元前722年1月16日 268
*N-720 12 乙亥 公元前721年1月5日 646
N-719 25 己亥 公元前720年1月23日 542
N-718 37 癸巳 公元前719年1月12日 920
*N-717 49 戊子 公元前718年1月2日 271
N-716 62 壬子 公元前717年1月21日 167
*N-715 74 丙午 公元前716年1月9日 545
N-714 87 庚午 公元前715年1月28日 441
*N-713 99 甲子 公元前714年1月17日 819
N-712 112 戊子 公元前713年2月5日 715
N-711 124 癸未 公元前712年1月25日 66
*N-710 136 丁丑 公元前711年1月14日 444
N-709 149 辛丑 公元前710年2月2日 340
N-708 161 乙未 公元前709年1月22日 718
*N-707 173 庚寅 公元前708年1月11日 69

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
N-706 186 癸丑 公元前707年1月29日 992
N-705 198 戊申 公元前706年1月19日 343
*N-704 210 壬寅 公元前705年1月8日 721
N-703 223 丙寅 公元前704年1月26日 617
N-702 235 庚申 公元前703年1月15日 995
*N-701 247 乙卯 公元前702年1月5日 346
N-700 260 己卯 公元前701年1月24日 242
*N-699 272 癸酉 公元前700年1月12日 620
N-698 285 丁酉 公元前699年1月31日 516
N-697 297 辛卯 公元前698年1月20日 894
N-696 309 丙戌 公元前697年1月10日 245
*N-695 321 庚辰 公元前697年12月29日 623
N-694 334 甲辰 公元前695年1月17日 519
N-693 346 戊戌 公元前694年1月6日 897
*N-692 358 癸巳 公元前694年12月27日 248

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
N-691 371 丁巳 公元前692年1月14日 144
*N-690 383 辛亥 公元前691年1月3日 522
N-689 396 乙亥 公元前690年1月22日 418
N-688 408 己巳 公元前689年1月11日 796
N-687 420 甲子 公元前689年12月31日 147
*N-686 432 戊午 公元前688年12月20日 525
N-685 445 壬午 公元前686年1月8日 421
N-684 457 丙子 公元前686年12月28日 799
N-683 469 辛未 公元前685年12月17日 150
N-682 481 乙丑 公元前684年12月6日 528
*N-681 493 己未 公元前683年11月25日 906
*N-680 506 癸未 公元前682年12月14日 802
N-679 519 丁未 公元前680年1月1日 698
*N-678 531 壬寅 公元前680年12月22日 49
*N-677 544 乙丑 公元前678年1月9日 972

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
N-676 557 己丑 公元前677年1月28日 868
N-675 569 甲申 公元前676年1月17日 219
*N-674 581 戊寅 公元前675年1月6日 597
N-673 594 壬寅 公元前674年1月25日 493
N-672 606 丙申 公元前673年1月14日 871
N-671 618 辛卯 公元前672年1月3日 222
*N-670 630 乙酉 公元前672年12月23日 600
N-669 643 己酉 公元前670年1月11日 496
N-668 655 癸卯 公元前670年12月31日 874
*N-667 667 戊戌 公元前669年12月20日 225
N-666 680 壬戌 公元前667年1月8日 121
*N-665 692 丙辰 公元前667年12月28日 499
N-664 705 庚辰 公元前665年1月16日 395
N-663 717 甲戌 公元前664年1月4日 773
*N-662 729 己巳 公元前664年12月25日 124

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
N-661 742 癸巳 公元前662年1月13日 20
N-660 754 丁亥 公元前661年1月2日 398
*N-659 766 辛巳 公元前661年12月21日 776
*N-658 779 乙巳 公元前659年1月9日 672
N-657 792 己巳 公元前658年1月28日 568
N-656 804 癸亥 公元前657年1月17日 946
N-655 816 戊午 公元前656年1月6日 297
N-654 828 壬子 公元前656年12月26日 675
N-653 840 丁未 公元前655年12月16日 26
*N-652 852 辛丑 公元前654年12月5日 404
N-651 865 乙丑 公元前653年12月23日 300
*N-650 877 己未 公元前652年12月12日 678
N-649 890 癸未 公元前651年12月31日 574
*N-648 902 丁丑 公元前650年12月20日 952
N-647 915 辛丑 公元前648年1月7日 848

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
*N-646 927 丙申 公元前648年12月28日 199
N-645 940 庚申 公元前646年1月16日 95
N-644 952 甲寅 公元前645年1月5日 473
N-643 964 戊申 公元前645年12月24日 851
*N-642 976 癸卯 公元前644年12月14日 202
N-641 989 丁卯 公元前642年1月2日 98
*N-640 1001 辛酉 公元前642年12月22日 476
N-639 1014 乙酉 公元前640年1月9日 372
N-638 1026 己卯 公元前640年12月29日 750
N-637 1038 甲戌 公元前639年12月19日 101
*N-636 1050 戊辰 公元前638年12月8日 479
N-635 1063 壬辰 公元前637年12月26日 375
*N-634 1075 丙戌 公元前636年12月15日 753
N-633 1088 庚戌 公元前634年1月3日 649
N-632 1100 乙巳 公元前634年12月24日 0

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
N-631 1112 己亥 公元前633年12月12日 378
N-630 1124 癸巳 公元前632年12月1日 756
*N-629 1136 戊子 公元前631年11月21日 107
N-628 1149 壬子 公元前630年12月10日 3
N-627 1161 丙午 公元前629年11月28日 381
*N-626 1173 庚子 公元前628年11月17日 759
*N-625 1186 甲子 公元前627年12月6日 655
N-624 1199 戊子 公元前626年12月25日 551
*N-623 1211 壬午 公元前625年12月13日 929
N-622 1224 丙午 公元前623年1月1日 825
N-621 1236 辛丑 公元前623年12月22日 176
*N-620 1248 乙未 公元前622年12月11日 554
N-619 1261 己未 公元前621年12月29日 450
N-618 1273 癸丑 公元前620年12月18日 828
*N-617 1285 戊申 公元前619年12月8日 179

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
N-616 1298 壬申 公元前618年12月27日 75
N-615 1310 丙寅 公元前617年12月15日 453
*N-614 1322 庚申 公元前616年12月4日 831
N-613 1335 甲申 公元前615年12月23日 727
N-612 1347 己卯 公元前614年12月13日 78
*N-611 1359 癸酉 公元前613年12月1日 456
N-610 1372 丁酉 公元前612年12月20日 352
N-609 1384 辛卯 公元前611年12月9日 730
*N-608 1396 丙戌 公元前610年11月29日 81
N-607 1409 己酉 公元前609年12月16日 1004
N-606 1421 甲辰 公元前608年12月6日 355
N-605 1433 戊戌 公元前607年11月25日 733
*N-604 1445 癸巳 公元前606年11月15日 84
N-603 1458 丙辰 公元前605年12月2日 1007
*N-602 1470 辛亥 公元前604年11月22日 358

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
*N-601 1483 乙亥 公元前603年12月11日 254
N-600 1496 己亥 公元前602年12月30日 150
N-599 1508 癸巳 公元前601年12月18日 528
*N-598 1520 丁亥 公元前600年12月7日 906
N-597 1533 辛亥 公元前599年12月26日 802
N-596 1545 丙午 公元前598年12月16日 153
*N-595 1557 庚子 公元前597年12月4日 531
N-594 1570 甲子 公元前596年12月23日 427
*N-593 1582 戊午 公元前595年12月12日 805
N-592 1595 壬午 公元前594年12月31日 701
N-591 1607 丁丑 公元前593年12月20日 52
N-590 1619 辛未 公元前592年12月9日 430
*N-589 1631 乙丑 公元前591年11月28日 808
N-588 1644 己丑 公元前590年12月17日 704
N-587 1656 甲申 公元前589年12月6日 55

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
*N-586 1668 戊寅 公元前588年11月25日 433
N-585 1681 壬寅 公元前587年12月14日 329
N-584 1693 丙申 公元前586年12月3日 707
*N-583 1705 辛卯 公元前585年11月22日 58
N-582 1718 甲寅 公元前584年12月10日 981
N-581 1730 己酉 公元前583年11月30日 332
*N-580 1742 癸卯 公元前582年11月19日 710
N-579 1755 丁卯 公元前581年12月7日 606
*N-578 1767 辛酉 公元前580年11月26日 984
*N-577 1780 乙酉 公元前579年12月15日 880
N-576 1793 己酉 公元前577年1月3日 776
N-575 1805 甲辰 公元前577年12月23日 127
N-574 1817 戊戌 公元前576年12月12日 505
*N-573 1829 壬辰 公元前575年12月1日 883
N-572 1842 丙辰 公元前574年12月20日 779

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
*N-571 1854 辛亥 公元前573年12月9日 130
N-570 1867 乙亥 公元前572年12月28日 26
N-569 1879 己巳 公元前571年12月17日 404
*N-568 1891 癸亥 公元前570年12月6日 782
N-567 1904 丁亥 公元前569年12月24日 678
N-566 1916 壬午 公元前568年12月14日 29
*N-565 1928 丙子 公元前567年12月3日 407
N-564 1941 庚子 公元前566年12月22日 303
N-563 1953 甲午 公元前565年12月10日 681
*N-562 1965 己丑 公元前564年11月30日 32
N-561 1978 壬子 公元前563年12月18日 955
*N-560 1990 丁未 公元前562年12月8日 306
N-559 2003 辛未 公元前561年12月26日 202
N-558 2015 乙丑 公元前560年12月15日 580
N-557 2027 己未 公元前559年12月4日 958

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
*N-556 2039 甲寅 公元前558年11月24日 309
N-555 2052 戊寅 公元前557年12月12日 205
N-554 2064 壬申 公元前556年12月1日 583
*N-553 2076 丙寅 公元前555年11月20日 961
*N-552 2089 庚寅 公元前554年12月9日 857
N-551 2102 甲寅 公元前553年12月27日 753
N-550 2114 己酉 公元前552年12月17日 104
*N-549 2126 癸卯 公元前551年12月6日 482
N-548 2139 丁卯 公元前550年12月25日 378
N-547 2151 辛酉 公元前549年12月13日 756
N-546 2163 丙辰 公元前548年12月3日 107
*N-545 2175 庚戌 公元前547年11月22日 485
*N-544 2188 甲戌 公元前546年12月11日 381
N-543 2201 戊戌 公元前545年12月29日 277
N-542 2213 壬辰 公元前544年12月18日 655

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
N-541 2225 丁亥 公元前543年12月8日 6
*N-540 2237 辛巳 公元前542年11月27日 384
N-539 2250 乙巳 公元前541年12月15日 280
*N-538 2262 己亥 公元前540年12月4日 658
N-537 2275 癸亥 公元前539年12月23日 554
N-536 2287 丁巳 公元前538年12月12日 932
*N-535 2299 壬子 公元前537年12月1日 283
N-534 2312 丙子 公元前536年12月20日 179
*N-533 2324 庚午 公元前535年12月9日 557
N-532 2337 甲午 公元前534年12月28日 453
N-531 2349 戊子 公元前533年12月16日 831
*N-530 2361 癸未 公元前532年12月6日 182
N-529 2374 丁未 公元前531年12月25日 78
N-528 2386 辛丑 公元前530年12月14日 456
N-527 2398 乙未 公元前529年12月2日 834

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
*N-526 2410 庚寅 公元前528年11月22日 185
N-525 2423 甲寅 公元前527年12月11日 81
*N-524 2435 戊申 公元前526年11月30日 459
N-523 2448 壬申 公元前525年12月18日 355
*N-522 2460 丙寅 公元前524年12月7日 733
N-521 2473 庚寅 公元前523年12月26日 629
*N-520 2485 甲申 公元前522年12月15日 1007
N-519 2498 戊申 公元前520年1月2日 903
N-518 2510 癸卯 公元前520年12月23日 254
N-517 2522 丁酉 公元前519年12月12日 632
*N-516 2534 辛卯 公元前518年12月1日 1010
N-515 2547 乙卯 公元前517年12月19日 906
N-514 2559 庚戌 公元前516年12月9日 257
*N-513 2571 甲辰 公元前515年11月28日 635
*N-512 2584 戊辰 公元前514年12月17日 531

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
N-511 2597 壬辰 公元前512年1月4日 427
N-510 2609 丙戌 公元前512年12月24日 805
N-509 2621 辛巳 公元前511年12月14日 156
N-508 2633 乙亥 公元前510年12月3日 534
*N-507 2645 己巳 公元前509年11月21日 912
N-506 2658 癸巳 公元前508年12月10日 808
*N-505 2670 戊子 公元前507年11月30日 159
N-504 2683 壬子 公元前506年12月19日 55
*N-503 2695 丙午 公元前505年12月7日 433
N-502 2708 庚午 公元前504年12月26日 329
N-501 2720 甲子 公元前503年12月15日 707
N-500 2732 己未 公元前502年12月5日 58
*N-499 2744 癸丑 公元前501年11月23日 436
N-498 2757 丁丑 公元前500年12月12日 332
*N-497 2769 辛未 公元前499年12月1日 710

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
N-496 2782 乙未 公元前498年12月20日 606
*N-495 2794 己丑 公元前497年12月8日 984
N-494 2807 癸丑 公元前496年12月27日 880
N-493 2819 戊申 公元前495年12月17日 231
*N-492 2831 壬寅 公元前494年12月6日 609
N-491 2844 丙寅 公元前493年12月24日 505
N-490 2856 庚申 公元前492年12月13日 883
*N-489 2868 乙卯 公元前491年12月3日 234
N-488 2881 己卯 公元前490年12月22日 130
*N-487 2893 癸酉 公元前489年12月10日 508
N-486 2906 丁酉 公元前488年12月29日 404
N-485 2918 辛卯 公元前487年12月18日 782
*N-484 2930 丙戌 公元前486年12月8日 133
N-483 2943 庚戌 公元前485年12月26日 29
N-482 2955 甲辰 公元前484年12月15日 407

* 此農曆年有閏月

春秋曆年 積月 正月月建 正朔日干支 正朔公曆日期 正朔小餘
*N-481 2967 戊戌 公元前483年12月4日 785
N-480 2980 壬戌 公元前482年12月23日 681
N-479 2992 丁巳 公元前481年12月12日 32

* 此農曆年有閏月


有了積月後,春秋曆的計算便十分簡單,而表中除了正月月建有時要比較難決定外,其他各欄的數據也可用積月輕易計算,這裡以N-649(魯僖公十年)作為例子說明。從表中得知N-649的正月積月是890,所以合朔時刻離N-721正朔辛巳日子正的時間是
[268/1027 + 890×(29 + 545/1027) ]日= (26282 + 574/1027)日
日數是26282、小餘574,小餘與表中數據吻合。日天干十日一週、日地支十二日一週,據此用同餘算術算得辛巳日後26282日的日干支是癸未,也與表中相符。公曆日期的計算可先由-721年至-649年的積日著手。公曆在1582年10月15日前用儒略曆,能被四整除的年份是閏年,有366日,其餘是平年,有365日。公元-721年至-649年有72年,其中有閏年的年份是-720年、-716年……-652年共18年,所以從-721年1月16日到-649年1月16日有(365×72 + 18)日=26298日=(26282+16)日,所以N-649的正月初一在-649年1月16日之前16日,即-650年12月31日,亦與表中的數據一致。至於正月月建,按定義含冬至的月份為建子(參看干支網頁),但是春秋曆沒有計算冬至的方法,當時是靠觀象測定,所以應接近當時實際的定氣冬至,根據氣朔時刻網頁,公元-650的冬至在12月28日註一。正月初一在12月31日,在冬至後三日,顯然上一個月含冬至,是建子,所以正月的月建是建丑。

知道了N-649的正月朔日日期和合朔小餘後,N-649的其他月份的初一日期和合朔小餘只須把正月朔的時刻加上朔策的整數倍便可求得。N-649沒有閏月,下表把正月至十二月的初一日期﹑干支和合朔小餘列出。

N-649(魯僖公十年)的月份編排

月份 朔日公曆日期 朔日干支 合朔小餘
正(大) 前651年12月31日 癸未 574
二(小) 前650年1月30日 癸丑 92
三(大) 2月28日 壬午 637
四(小) 3月30日 壬子 155
五(大) 4月28日 辛巳 700
六(小) 5月28日 辛亥 218
七(大) 6月26日 庚辰 763
八(小) 7月26日 庚戌 281
九(大) 8月24日 己卯 826
十(小) 9月23日 己酉 344
十一(大) 10月22日 戊寅 889
十二(小) 11月21日 戊申 407

月大月小由兩朔日之間的日期間隔決定,兩朔日相差二十九日為小月﹑三十日為大月。有了合朔小餘後,計算大小月便十分簡單。把合朔小餘加上545,然後視乎需要減去1027便得到下一個月的合朔小餘。如果某月的合朔小餘小於482,加上545後的數值不超過1027,就是說下一個朔日在二十九日後,所以該月是小月;如果某月的合朔小餘大於或等於482,加上545後便達到或起過1027,小餘要減去1027、日數要進一,就是說下一個朔日在三十日後,所以該月是大月。結論是合朔小餘小於482的月份是小月、否則是大月。用現在通行的24小時制來說或會較易理解,朔策是29日12小時44分10秒,所以每月的合朔離午夜零時的時間是前月的時間加上12小時44分10秒,達到或超過24時則減去24,合朔時間如果在11:15:50前,加了12小時44分10秒後仍小於24時,則此月是小月,合朔時間如果在11:15:50或之後則是大月。不難推出如果合朔小餘大於963就會出現連續兩個大月,但是按復原春秋曆的計算法不可能出現連續兩個小月。由於朔望月的日數稍大於29.5日,用平朔法制定的曆法不可能連續出現兩個小月。


《中 国 古 代 历 法》表 3-7 勘 誤

我用推出的積月來反推正朔日干支和正月月建以核對《中国古代历法》表3-7的數據,結果大部份與表3-7所載的資料相符,但有五項數據與表列的不合,仔細分析後發現表3-7的那五項數據與表中正朔小餘的數字有矛盾,其中之一必定有錯,我認為表3-7的那五項數據應修改如下:

春秋曆年 《中国古代历法》表3-7錯誤訂正
N-720(魯隱公二年) 正朔日干支: 己亥 乙亥
N-681(魯莊公十二年) 正朔月建: 丑
N-680(魯莊公十三年) 正朔月建: 寅
N-653(魯僖公六年) 正朔日干支: 丙午 丁未
N-623(魯文公三年) 正朔小餘: 614 929

N-720的錯誤較易處理。假如N-721沒有閏月,N-720的正朔小餘是646,與表3-7所列的一致,但日干支卻是乙丑;假如N-721有閏月,N-720的正朔小餘是164,與表列不符,而日干支是乙巳。所以無論N-721有沒有閏月,N-720的正朔日干支都不可能是己亥,己亥無疑是乙亥之誤。

比較N-682和N-681的正朔小餘,可知N-682沒有閏月,N-681的正月朔日是-682年11月25日,顯然在冬至之前,所以絕不可能是建丑。-682年的冬至在12月28日,離正月初一有33日,由此可知正月不可能含冬至,只能是建亥。-682年11月25日的日干支是己未,與表3-7所列的一致,但是建丑月朔的日干支也是己未,因此日干支與表3-7列出的月建沒有矛盾。可是假如正月初一的月建真是建丑,除了正朔小餘的數字不一致外,也意味著N-682有十四個月,這就應該不可能了。所以把建丑改為建亥是合理的。

解決了N-681的月建錯誤後,不難斷定N-680的建寅月建也不正確。比較N-681和N-680的正月小餘推出N-681有閏月,N-680的正朔日在-681年12月14日,正月含冬至,是建子。正朔日干支是癸未,與表3-7的數據一致,而建寅月朔日干支是壬午,不合,正朔小餘的數值也不合。改建寅為建子後就沒有問題了。

表3-7列出N-654的日干支是壬子,正朔小餘是675,N-653的正朔小餘是26=mod(675+378, 1027),由此推出N-654沒有閏月。因此從N-654正朔壬子日子正到N-653正月朔的日數是
[675/1027 + 12×(29+545/1027)]日 = (355 + 26/1027)日
日數355﹑小餘26。壬子日355天後是丁未日,是丙午日之後一天。表列的丙午應是計算錯誤。

表3-7列出N-624(魯文公二年)的正朔月建是子,朔日是戊子(前626年12月25日),小餘是551。如果N-624沒有閏月,N-623的正月朔是建子月壬午日(前625年12月13日),小餘是929。如果N-624有閏月,N-623的正月朔是建丑月壬子日(前624年1月12日),小餘是447。因此無論N-624有沒有閏月,N-623的正朔小餘都不是614,表3-7列出N-623的正朔是建子月壬午日,所以小餘是929。

張培瑜著的《三千五百年历日天象》(大象出版社‧1997年7月)也有春秋曆表,其中N-721﹑N-681和N-680的正月朔日與修改表3-7後的日期一致,但是該書列出的N-675﹑N-674﹑N-600﹑N-519和N-502正月朔日與《中国古代历法》表3-7的數據相差一個月。這裡沒有採用《三千五百年历日天象》的數據,因為書中沒有說明計算方法,難以斷定是否有誤註二


春 秋 曆 的 閏 月 和 正 月 月 建

目前學界對於春秋曆閏月的位置沒有一致意見,清末的王韜為了化解《春秋》記載的某些曆日干支與推算不符,在年中加插閏月解決分歧。張培瑜指出《春秋》僅有兩次閏月的記載皆書於年終,而且春秋曆沒有年中置閏的科學依據,主張閏月應是置於年終。本網站採用張培瑜的說法把閏月置於年終。

由於春秋曆沒有固定的置閏法則,其正月月建也不固定,而是在建亥與建寅之間罷動。從復原的春秋曆可看出早期的正月月建多在建丑、後期則多在建子。張培瑜推測魯國曆法家在後期漸漸掌握了十九年七閏和回歸年的規律,可能有意把年首從建丑調整到建子。到了戰國時代,魯國使用古六曆之一的魯曆,置閏有了固定法則,把年首固定在建子。


復 原 的 春 秋 曆 法 是 否 可 信 ?

張培瑜復原的春秋曆法是根據《春秋》書中記載的曆日來推算朔策和閏月,其計算方法只能說是數據擬合的模型。合朔時刻用朔策的整數倍加曆元合朔時刻計算,符合平朔法則,但是用一個朔策來推算整個春秋242年的曆日,是假設曆法在這二百多年沒有更改過,似乎不大可能,但在缺乏資料的情況下,這做法也無可厚非。檢驗復原的春秋曆法可信程度可以從復原曆法與《春秋》記載的曆日差異來衡量。

據張培瑜在《中国古代历法》第三章第五節所述,《春秋》載有393個曆日干支,絕大多數都符合復原的春秋曆法,不符者有45條,其中有11條可用年中置閏的方法解決。《春秋》一書年代久遠,經過歷代多次傳抄後出現錯誤在所難免,而且現存《春秋》有些記錄據說確有不相容之處。有些差異當然可用「誤記」解決,但是難以判斷哪些資料屬誤記,哪些確是與復原曆法相悖。如果假設那45條確是復原曆法的不足,則復原曆法與春秋魯國的真實曆日可能有大約89%相符。再比較《中国古代历法》表3-7中復原曆法與王韜的《朔閏日至考》,得知兩者有時會有一個月的差別,這是兩人對於是否有年中閏月的觀點不同產生的。從這些資料我推測復原曆法雖然極可能與相時在魯國使用的實際曆法有差異,但差異可能不大,復原曆法對歷史學家極具參考價值。


儒 略 日 數

上面展示的計算N-649正月朔方法以N-721正月朔辛巳日子正作為計算時間的起點,現代的曆日計算大多用儒略日數,其時間起點是-4712年1月1日正午。為方便起見,這裡把這時間起點當作魯國的地方時。N-721正月朔辛巳日子正的儒略日數是1457727.5,所以把上面例子N-649正月朔的積日加上1457727.5便是儒略日數。

儒略日數的好處是已有標準方法把儒略日數轉換成公曆日期,本網站的干支網頁也有用儒略日數計算日干支的公式。其實如果只是計算春秋曆,用儒略日數並不比上面展示的方法簡單。公曆的日期編排規整,即使不用標準的儒略日數轉公曆日期的方法也不難自創方法計算。但是如果要編程序計算春秋曆、古六曆秦漢曆法時,用儒略日數就較為方便,因為各種曆法有各自的時間起算點,轉換成儒略日數就是把時間起算點統一在-4712年1月1日正午,就可以用統一的方法計算公曆日期和日干支等,這在編寫程序上很有用。

這裡介紹用儒略日數計算春秋曆的方法。上面公式(1)的合朔時刻可用以下儒略日數 表示。
JD(Mi) = 1457727.5 + 268/1027 + i(29 + 545/1027)     (5)
這裡又以N-649的正月朔為例,從上表得知該年正月朔的積月是890,代入公式(5)求得儒略日數是
JD = 1457727.5 + 268/1027 + 890× (29 + 545/1027) = 1484009.5 + 574/1027
正朔日子正的儒略日數是1484009.5,正朔小餘是574。朔日正午的儒略日數是1484010,用儒略日轉公曆的標準方法(例如理查斯算法)算出儒略日1484010對應的公曆日期是-650年12月31日。用干支網頁的公式求得朔日的天干數是
1 + mod(1484010-1, 10) = 10,日天干是癸;朔日的地支數是
1 + mod(1484010+1, 12) = 8,日地支是末,所以朔日干支是癸末。所有結果都與上面的計算吻合。

以上的計算保留以1027為分母的分數。現代的計算多用電子計算機,在計算上分數其實是較為快捷的,在編寫計算機程式上處理分數運算卻較為費時,所以用浮點計算雖然稍為降低了計算效率,但在編程式上比較簡單,而且現代的電子計算機計算速度相當快,根本不會察覺微小的效率降低。但是有一點要注意:當合朔小餘是0時,合朔發生在子正,儒略日數的小數部分是0.5,但是計算機的浮點舍入誤差或會使儒略日數的小數部分變成0.49999999999,這會使日期計算有一日之差。為了避免這誤差,可把公式(5)的儒略日數加上0.0001,即用以下公式計算合朔時刻:
JD(Mi) = 1457727.761054236 + i · 29.53067185978578      (6)
由於0.0001 = 0.1027/1027,加了0.0001後使合朔小餘從本來的0和1026之間變成0.1027到1026.1027。因為小餘的最小值不會是0,浮點舍入誤差便不會使日期有偏差了。用十進制小數計算時刻,不再須要理會小餘,但是如果要計算也可以:
小餘(略去分母1027) = floor(1027(JD + 0.5 - floor(JD + 0.5))     (7)
這裡floor(x)表示不大於x的最大整數。JD + 0.5 - floor(JD + 0.5)是小餘以十進制小數表示,乘1027後便是小餘的分子,由於加了0.0001,乘後所得的數是某整數加上0.1027,最後floor()把小數部份刪除,便得到略去分母1027的小餘。如前述,用浮點計算就不必理會小餘,計算小餘的唯一價值是用來比較《中国古代历法》表3-7的數據,從而檢驗計算程序是否正確。



備 註