本帖最后由 walhyh 于 2025-3-15 08:54 编辑
春秋鲁国历法研究(隐桓时期) ——基于《春秋》经传、《十二纪》与天文反演的整合分析 《春秋》是中国第一部编年史,其中的历法是周代礼制政治与地域实践矛盾的产物:反映了先秦政治、天文与礼制之间的复杂互动。官方以周正维系王权象征,民间借夏正适应农耕需求。这一双重性既体现“三正”体系的交互影响,也反映春秋时期历法从观象授时向规则推定转型的复杂性。反映周王权象征与地方治理的张力,为理解春秋“礼崩乐坏”提供技术视角。 西周“观象授时”依赖直观经验,以观测天象为依据,通过日月星辰的运行指导农事与政治活动。《春秋》中记载的日食、月食等天文现象,正是“观象授时” 传统的延续。鲁国频繁进行的历法调整,如闰月设置与岁首变更等,表明当时已不完全依赖实际天象观测,而是逐步形成了早期历法推算体系。这种推算体系可能与鲁国作为周礼文化中心的政治需求相关。鲁僖公五年(前656年)前,鲁历采用建丑月(农历十二月)为正月,此后改为建子月(周正)。这一调整可能受到周王室权威衰落与鲁国强化自身礼制正统性的双重影响,但始终未脱离周正的核心框架。 鲁国的历法调整,既是技术层面的探索,也是政治权威与礼制秩序重建的缩影。《春秋》通过编年体例和“微言大义”的叙事方式,不仅保存了先秦历法转型的轨迹,更揭示了天文观测、政权合法性及礼制实践之间的深层关联。 在《春秋》经传的记载中,有些历日无法用以朔日为月首的朔望月概念给予解释的。据笔者统计,《春秋经》中记载着含有年、时、月、日干支的记事共计有394条(其中2条日干支重复),实际历日干支为393个。在鲁定公十二年“冬十月癸亥”之前的358个历日干支中有41个历日干支无法用朔望月来解释,约占全部历日干支数的11.45﹪。 有人认为,无法用朔望月解释的历日,不属于鲁国历法。 然而,这一观点是不能成立的。比如,《春秋经·隐公二年》记有“秋八月庚辰,公及戎盟于唐”,“十有二月乙卯,夫人子氏毙”。这两个历日无法用朔望月解释。作为记载鲁国重大事件(如盟约、丧礼)的《春秋经》,显然不可能用一种历法来记载“秋八月庚辰”,鲁公与戎结盟,然后再用另外一种历法去记载“十有二月乙卯”,国君夫人去世。 再如,《春秋经·桓公十七年》记载:“春正月丙辰, 公会齐侯、纪侯盟于黄。”,“二月丙午,公会邾仪父,盟于趡”。这两个历日间隔10天或70天,若以朔望月计算(29.5天/月),此间距不符月首逻辑。但二者均为鲁公盟会记录,显然不可能分属不同历法体系。 在尊祟汉儒的人的眼中,春秋时期乃至商周时期的历法都是建立在朔望月概念的基础之上的。因此,他们认为,无法用朔望月解释的历日都是是错误的。如《春秋经·桓公十七年》记载:“二月丙午,公会邾仪父,盟于趡”。有人就直言“二月无丙午”。 这样的观点同样不能成立,因为这违背了尊重原始文献的实事求是的科学精神。事实上,在汉代,人们已经弄不清楚春秋时期的历法了。《史记·十二诸侯年表》未采用《春秋》历日,表明汉代已无法还原春秋历法全貌。汉儒对“既生霸”有着截然相反的两种观点,进一步说明汉代对先秦历法的理解存在断层。因此,研究春秋时期的历法,不应该将思路局限在阴历月只能是朔望月这一点上,而应在尊重原始文献的基础上,实事求是地作出符合科学的结论。 自儒家将《春秋》列为五经之一后,历代研究鲁国历法的不乏其人。其中影响较大的有杜预、陈厚耀。 杜预在《春秋长历》中主要参照《乾度历》的推算体系,结合《泰始历》等古历,通过数学推步复原春秋时期的朔闰日期及日月食记录。其核心目标是调和《春秋》经传中的历日矛盾,尤其是鲁国历法与周王室颁朔的偏差。为弥补古历与实测天象的差距,杜预提出“借半日法”,即在推算朔日时对合朔时刻进行人工调整,使朔日与月相更趋一致2。但这一方法未彻底解决春秋历法中“月首非朔”(即月初一非实际合朔日)的根本矛盾。杜预《春秋长历》的“月首非朔”矛盾,本质是历法复原研究中“历史真实”与“体系自洽”不可兼得的体现。其局限既源于汉代以降历法理论的缺陷(如忽略岁差)14,也受制于先秦历法实践本身的混杂性。这一矛盾成为后世考订春秋历法的重要切入点,推动了中国古代历法学从经学附庸向独立学科的发展。 陈厚耀在《春秋长历》续补中,引入更精确的《时宪历》推算体系,通过调整连大月间隔与闰月设置,修正杜预推算中累积的干支误差。例如,针对春秋时期“岁末置闰”的僵化规则,他提出年中置闰方案,使朔望月与回归年周期更趋吻合。通过对比《春秋》经传中的日食、月相记载,结合清代天文测算技术,重构春秋时期连续干支序列。如《春秋》记载的桓公三年日食,陈厚耀利用《时宪历》推步验证其发生于夏正七月甲辰日,纠正前人推算的月份偏差。陈厚耀的干支补正工作,既体现清代历算技术的进步,又暴露经学范式对实证研究的结构性限制23。其成果成为连接古代观象授时传统与现代天文史研究的关键环节,但“经义优先”思维导致的诠释偏差,仍需结合考古发现与跨学科方法进一步修正。 郑捍马利用《Stellarium》V0.10.6.1中文版桌面星空软件和《实用万年历》V6.06软件(前者提供直观的图像,后者查对干支日名和合朔时分),对《春秋》、《左传》所记日食做了直观的验证。 笔者受到郑捍马利用《Stellarium》的启发,用Stellarium 24.4.0中文版桌面星空软件(以下简称《Stellarium》)许剑伟先生编著的《寿星天文历(V5.05)》(以下简称《许历》),前者提供直观的图像,后者查对干支日名和公历日期,对在鲁国历法中存在的无法用朔望月解释的历日进行还原实证。 在利用《Stellarium》反演公元前的年份时,有一点要特别指出。由于这套软件将公元一年之前的一年设为了公元0年,而实际应该是公元前一年,因此《Stellarium》标明的公元前的年份都比实际年份少了一年。如软件标明的-999年实际应是公元前1000年。将《Stellarium》的观测地点按照“Qufu(曲阜),北纬35º35'48.01,东经116º59'28.00,海拔69米”的数值设定。 通过还原实证,笔者发现它们很有可能属于《吕氏春秋·十二纪》(以下简称《十二纪》)天象所代表的观象授时历。 现在一般认为《十二纪》中所记的星象是春秋战国时期实际观测的记录,是二十四节气在历史文献中最早、最完整的记载。现将有关星象的记载整理如下(1): “孟春之月,日在营室,昏参中,旦尾中”。 “仲春之月,日在奎,昏弧中,旦建星中”。 “季春之月,日在胃,昏七星中,旦牵牛中”。 “孟夏之月,日在毕,昏翼中,旦婺女中”。 “仲夏之月,日在东井,昏亢中,旦危中”。 “季夏之月,日在柳,昏心中,旦奎中”。 “孟秋之月,日在翼,昏斗中,旦毕中”。 “仲秋之月,日在角,昏牵牛中,旦觜巂中”。 “季秋之月,日在房,昏虚中,旦柳中”。 “孟冬之月,日在尾,昏危中,旦七星中”。 “仲冬之月,日在斗,昏东壁中,旦轸中”。 “季冬之月,日在婺女,昏娄中,旦氐中”。 多数人认为“孟春之月,日在营室,昏参中,旦尾中”的意思是“孟春这个月,太阳在白天运行到营室位置,傍晚参宿在中天(正南方),早晨尾宿在中天”。细加推敲,就会发现,这个解释并不准确。因为它不仅漏掉了一个重要的天体----月球,而且把参宿、尾宿提高到了与太阳并列的位置。这一解释与二十八宿本来的意义想去甚远。 二十八宿,是黄道附近的二十八组星象总称。上古时代人们根据日、月和五大行星的运行轨迹和位置,把黄道附近的星象划分为二十八组,俗称“二十八宿”。古人选择黄道赤道附近的二十八个组星象作为坐标,以此作为观测运动天体的参照物。因为它们环列在日、月、五大行星的四方,很像日、月、五大行星栖宿的场所,所以称作“宿”。也就是说,“昏参中,旦尾中”中的参宿、尾宿其实和营室一样只是运动天体的坐标。那么以参宿、尾宿为坐标的会是什么天体呢?从语境来看,这个天体不可能是五大行星,而只能是月球。 所以,我们认为:“孟春之月”中的“月”,指得并不是时间意义上“月”,即月份,而是天体意义上的“月”,指得是月球。《十二纪》中的星象实际上是太阳和月球在十二个月中的三十六个坐标。“孟春之月,昏中在参,旦中在尾,日在营室”。意思是说,孟春时节的月球,黄昏时运行到南中天参宿的位置,清晨时运行到南中天尾宿的位置,太阳在白天运行到中天时,是在营室的位置。 也就是说,《十二纪》星象是后世二十四节气的雏形,它们相互之间的间距都是15天。所不同的是,《十二纪》星象对应的是太阴历,而二十四节气对应的是太阳历。在这里,我们选取鲁襄公三年(前570)每月的上下弦日作为验证对象,以检验上下弦月与相关星宿是否同在南中天。笔者反演的结果如表一。 《Stellarium》反演的结果表明:软件所得到的月球运行到中天相关星宿的时间与《许历》中的朔望月上、下弦日的日期接近或重合。这就表明,《十二纪》所记载的天象很有可能是观象授时的标准参照物。 那么,这一时期历法的本来面目究竟是怎样的,《十二纪》中的天象与《春秋》经传的历月存在着怎样的关系?利用《Stellarium》反演当年的天象,可以有助于我们厘清这一点。下面我们来看具体的实例。 一、《春秋经·隐公十年》有如下历日: 春王二月,公会齐侯、郑伯于中丘。 夏,翚帅师会齐人、郑人伐宋。 六月壬戌,公败宋师于菅。 辛未,取郜。辛巳,取防。 冬十月壬午,齐人、郑人入郕。 《左传·隐公十年》有以下历日: 春王正月,公会齐侯、郑伯于中丘,癸丑,盟于邓,为师期。 夏五月,羽父先会齐侯、郑伯伐宋。 六月戊申,公会齐侯、郑伯于老桃。壬戌,公败宋师于菅。庚午,郑师入郜;辛未,归于我。庚辰,郑师入防;辛巳,归于我。 秋七月庚寅,郑师入郊,犹在郊。……八月壬戌,郑伯围戴。癸亥,克之,取三师焉。 九月戊寅,郑伯入宋。 这一年的16条含有年、时、月、日干支的记事中共有历日干支11个(癸丑日因《春秋经》和《左传》所记的月份不同除外)。 将以上历日干支代入张培喻编着的《春秋朔闰表》(以下简称《张表》),可得表二。 隐公十年中,历日相互之间的关系如下:六月戊申日至九月戊寅日的间距为90天,若每月平均天或13天。七月庚寅日至八月壬戌日的间距为32天,合1个月另2天或3天。八月壬戌日至九月戊寅的间距为16天,约合半个月。 由此可见,六月戊申日和九月戊寅日应该都是当月的月首,而七月庚寅日和八月壬戌日则均在各自的月中。根据《许历》可知,六月戊申日在六月丙辰朔之前8天,为下弦日。九月戊寅日在九月甲申朔之前6天,下弦日之后1天。也就是说,这时是以下弦日为月首的。 从《Stellarium》反演的当年天象,能够看到,前713年6月23日(丁未,下弦前一日)天明时分,月球与奎宿九(βAnd)在中天附近(见图一)。《十二纪》曰:“季夏之月,日在柳,昏心中,旦奎中”。就是说,这时的季节在“旦奎中”的“季夏之月”。这时的历月在六月初。 图一 利用《Stellarium》反演可以发现,9月22日(戊寅,下弦前一日)天明时分,月球与柳宿六(ζHya)在中天附近(见图二)。《十二纪》云:“季秋之月,日在房,昏虚中,旦柳中。”这就表明,此时候的月份在“昏虚中,旦柳中”的“季秋之月”。戊寅日在九月初。 图二 二、《春秋经·桓公十二年》有历日如下: 秋七月丁亥,公会宋公、燕人,盟于穀丘。 八月壬辰,陈侯跃卒。 《十二纪》曰:“孟秋之月,日在翼,昏斗中,旦毕中”。根据《Stellarium》反演的当年天象,可以看到公元前699年7月31日(癸巳)天明时分,月球与毕宿五(αTau)均在中天附近(见图三)。这是“旦毕中”的天象,表明这个时候的季节应该是孟秋之月。八月壬辰日在癸巳日前一天。也就是说,八月月首至少先于天象1天,这说明,当年的七、八月之交有可能不是观察之后决定的,而是事先推定的。 三、《春秋经·桓公二年》有历日如下: 春王正月戊申,宋督弑其君与夷…… 夏四月,取郜大鼎于宋。戊申,纳于大庙。 正月戊申日至四月戊申日之间相距59天,若每月平均以29.5天计算,正好是两个月。显然,正月戊申日在月未,四月戊申日为月首。根据《许历》,正月戊申日在辛丑朔之后7天,为上弦日。四月戊申日在三月庚子朔之后8天,上弦日之后1天。毫无疑问,这一年历月的月首在上弦日。 图三 利用《Stellarium》反演可以知道,公元前710年2月9日(正月戊申日)黄昏时刻,月球与参宿七(βOri)在中天附近(见图四)。《十二纪》云:“孟春之月,日在营室,昏参中,旦尾中”。由此可见,这个时候的季节在“昏参中”的“孟春之月”,即一月。2月9日(正月戊申日)在一月末。桓公二年正月至四月的月首设置于上弦日附近,本质是鲁国历法结合天象观测(如参宿中天)与干支推算的动态调整结果。这一机制既保证了历法标注与季节星象(如“昏参中”)的吻合,又满足了政治活动(如纳鼎仪式)对时间准确性的需求,体现了春秋时期“以月相定历”的实践特征。 图四 四、《春秋经·隐公二年》有历日如下: 秋八月庚辰,公及戎盟于唐。 十有二月乙卯,夫人子氏毙。 《春秋经·隐公三年》有如下历日: 春王二月,己巳,日有食之。 夏四月辛卯,君氏卒。 隐公二年八月庚辰日至三年二月己巳日的间距为169天,若每月平均以29.5天计算,合5个月另22天。八月至二月之间相隔5个月,由《张表》可知,庚辰日在九月乙未朔之前15天。所以,二年八月至三年二月之间没有闰月。可以据二月己巳日推定每月的朔日以及相关干支日的月相。 八月庚辰日至十二月乙卯日的间距为95天,若每个月平均以29.5天计算,合3个月另7天。八月至十二月之间相隔3个月,这就表明,庚辰日在八月末,乙卯日在十二月初。由于,庚辰日在八月辛未朔之后9天,十二月乙卯日在十二月己巳朔之前14天。因此,这一年历月的月首很有可能是在朔望月的上半月。 由推定可知,隐公二年八月庚辰日在朔望月的初十日,上弦日的后一日。从《Stellarium》反演的当年天象,能够看到,前721年9月6日(庚辰)黄昏时刻,月球与牛宿一(βCap)在中天附近(见图五)。《十二纪》曰:“仲秋之月,日在角,昏牵牛中,旦觜巂中”。也就是说,八月月首设于上弦日附近,与“仲秋之月”末期吻合。 图五 利用《Stellarium》反演可以发现,前720年5月13日(己丑)天明时分,月球与危宿三(εPeg)在中天附近(见图六)。《十二纪》云:“仲夏之月,日在东井,昏亢中,旦危中”。这表明表明四月月首设于下弦附近,与“仲夏之月”初期吻合,反映月首从上年末的上弦转为下弦。 图六 综上所述,《十二纪》中记载的星象并不是同一天的早晨和黄昏时所能观察到的,而分别是在月中和月末所观察到的,并据此观察来确定下个月的月首。同时,《春秋经》中历月的月首并不固定,有时在下弦(如例一、二、四),有时在上弦(如例三、四)。这时的历法很有可能实行的是观象历,即在弦日的前一天观察天象并以此来决定季节的历法。当然,也有可能是年末观察天象,然后推定出下一年的历法。 既然月首不固定,就一定有月首转换之月。转换之月有两种,即月首在上弦,月末在下弦;或月首在下弦,月末在上弦。月长亦有两种,一种为15天左右,另一种为45天左右。 根据《许历》可知,在上例中,隐公二年十二月乙卯日至三年四月辛卯日的间距为156天,若每月平均以29.5天计算,合5个另8天或9天。从十二月到次年四月,共计有5个月。如果乙卯日在十二月初,辛卯日在四月初,那么在十二月至四月之间,一定有一个天数大于30天的大月。这个月很有可能就是十二月。 为什么要将十二月设置成一个天数多于30天的大月呢?原来这和当时的天象有关。 《十二纪》曰:“仲冬之月,日在斗,昏东壁中,旦轸中”,“季冬之月,日在婺女,昏娄中,旦氐中”。根据《Stellarium》的反演,可以看到,12月17日天明时分,月球与轸宿一(γCrv) 在中天附近(见图七)。12月31日黄昏时刻,月球与娄宿三(αAri)在中天附近(见图八)。1月16日天明时分,月球与氐宿四(βLib)在中天附近(见图九)。这就是说,虽然12月10日(乙卯)已经在十二月了,但是,12月17日(壬戌)天明时分的天象却显示,此时的季节仍然和上月一样,是在 “仲冬之月”。说明此时的季节转换滞后于历法标注。直到12月31日“昏娄中”,1月16日“旦氐中”,天象表明,这时才开始进入了“季冬之月”。既然1月16日才是“季冬之月”月末,其到12月10日(乙卯)的天数当然就超过了30天,一月的月首也就延迟到了1月16日之后。 图七 图八 图九 隐公二年十二月被设为30天以上的大月,本质是鲁国观象历为弥合天象滞后与历法标注矛盾而采取的调整措施。通过延长十二月长度,将月首从下弦附近延迟至下月天文观测的星象节点(如“旦氐中”),维持季节与历法的一致性。这一机制体现了先秦历法“以星定月”的实践逻辑,即以弦日附近的星象观测为基准,动态调整月首位置及月长。 在例一中,九月戊寅日至十月壬午的间距为64天。查《许历》可知,戊寅日在下弦日的后一日,是九月首日。所以,九月有可能是一个45天左右的月首转换之月。根据《Stellarium》的反演,可以看到,11月3日(庚申)黄昏时刻,月球与危宿三(εPeg)在中天附近(见图十)。《十二纪》曰:“孟冬之月,日在尾,昏危中,旦七星中”。这表明,庚申日之后已属历法标注的孟冬,也就是十月。壬午日在庚申日之后22天,自然也在十月。由此可见,九月很可能是一个44天的月首转换之月。 图十 五、《春秋经·桓公十七年》有如下历日: 春正月丙辰, 公会齐侯、纪侯盟于黄。 二月丙午,公会邾仪父,盟于趡。 夏五月丙午,及齐师战于奚。 六月丁丑,蔡侯封人卒。 秋八月……癸巳(053),葬蔡桓侯。 冬十月,朔,日有食之。 将这些历日干支代入《张表》,可得表四。 二月丙午日至夏五月丙午日,其间相距60天。根据《张表》,二月丙午日在二月癸卯朔之后3天。五月丙午日在四月壬寅朔之后4天。这就表明鲁桓公十七年的月首不在朔日,而是在朔望月的初五,即上弦日附近。由上表可见,该年的秋九月很有可能是一个天数在15天左右的月首转换的小月。在这个小月之前,历月月首在上弦日前后,到了小月之后,历月月首则转换到了下弦日附近。 那么,秋九月的天数为什么会是15天左右呢? 利用《Stellarium》反演当年的天象,可以发现,公元前695年10月2日天明时分,月球与柳宿六(ζHya)在中天附近(见图十一)。《十二纪》云:“季秋之月,日在房,昏虚中,旦柳中”。这表明,10月2日“旦柳中”在“季秋之月”。根据《许历》可知,9月30日(庚申)秋分。这就表明,当时是将秋分和“旦柳中”一起,当做了“季秋之月”结束时的天象,所以,秋九月就成了15天左右的月首转换之月。秋九月缩短为15天,本质是鲁国历法在阴阳合历框架下,通过观测月相和星象(如上弦、下弦、柳宿中天)对月首进行动态调整的结果。这一调整既解决了月首相位偏移问题,又确保了重大天象(如日食)与历法记录的一致性,反映了先秦历法“以天验历”的实践特征。需要指出的是,秋分应为仲秋,这时其当做季秋,似乎表明这一年的岁首提前了一个月。 图十一 例三中的“正月戊申”与“四月戊申”相距60天,例五中的“二月丙午”到“五月丙午”的距离也是60天,这表明它们中间两个月都是29、30或30、29大小相间的。从公元前710年2月9日(桓公二年正月戊申)到公元前695年5月19日(十七年五月丙午),两者之间相距5577天,以每月平均29.5天计算,合189个月。而189个朔望月,以每月平均29.53059计算,应有5581天。两者相差4天。查《许历》可知,公元前695年5月19日(十七年五月丙午)与5月23日(庚戌、上弦)相距4天。这就表明,鲁桓公时期历法已具备推步特征:月份长度按固定规则(大小月交替)推算,而非依赖实际月相观测;通过月相周期(如上弦)校准误差,如前述的9月,以确保历法与季节大致同步。综上所述,鲁桓公时期推步历法的实施,为春秋时期历法从观测向计算过渡提供了重要实证。 通过对以上历日的分析,我们发现,《春秋》经与《左传》在隐桓时期所采用均为鲁国历法,两者记录时间的差异源于事件起止节点的不同选择,而非历法冲突。例如:鲁隐公十年,鲁隐公会齐侯、郑伯于中丘,癸丑,盟于邓。据《许历》推算,“癸丑日”(对应公元前713年3月1日)为朔望月的第26日,说明该月月首设定于下弦日(月相周期的后期)因此,会盟活动跨越正月末至二月初,《春秋经·》记“春王二月”为盟誓完成的最终时间点;《左传·隐公十年》记“春王正月”为会盟开始的初始时间点。《左传》以起始日定月,《春秋》以结束日定月《左传》作为《春秋》的注释性史书,在编年体框架内补充细节,强化了事件的时间延续性;这一差异反映了史书编纂中“起止时间分界”的灵活处理,而非历法本身的矛盾。鲁国历法以干支纪日为核心,结合月相调整月首(如“下弦日”作为月首的特殊情况),导致跨月事件的记录需结合具体天文现象解读;此类记录方式在先秦编年体史书中具有普遍性,体现了早期历法对政治活动的实际指导作用。综上,《春秋》经与《左传》的历法差异本质为史书编纂角度的差异,两者共同构成对同一事件的多维记录。这一现象既符合先秦编年体史书的特点,也反映了鲁国历法结合天文观测的实用特征。 隐公、桓公时期鲁国历法在缺乏精密数学模型的条件下,通过“观测→调整→再观测”的循环,实现了天象、农时与政治需求的动态平衡。是一种高度灵活的历法体系,堪称中国古代天文学从经验向理论过渡的关键里程碑。是周王权象征与地方实践需求妥协的产物,其核心矛盾体现为观测技术的局限性与政治统一的理想化诉求。这一体系既延续了西周“敬授民时”传统,又为战国历法改革提供了实验场。是观测实践与政治需求交织的产物,其核心矛盾体现为弦月定位的直观性与节气推算的系统性冲突。既为后世历法奠定了天文观测的基础,也因频繁调整暴露了早期历法的脆弱性,成为春秋时期「礼崩乐坏」的隐性注脚。
参考资料 (1)、张培瑜:《春秋朔闰表》,《三千五百年历日天象》,河南教育出版社1990年7月。 (2)、许剑伟:《寿星天文历(V5.05)》(网上下载)。 (3)、Stellarium 24.4.0中文版桌面星空软件(网上下载)。
注释 (1)、《二十二子》,上海古籍出版社,1985年。
|