还原与解惑商代历法自从在殷墟发现甲骨卜辞之后,各家就对甲骨卜辞中所记录的日期及其所表现的商代历法发表了各种看法,并且在月长、月首、年首、置闰等各方面出现了很大的分歧。因而,似有必要再做检讨,修正或重新复原商代历法,以符合殷墟甲骨卜辞中的日期记载。一、卜辞中日期的疑惑与困惑由于各家对商代历法持有不同观点,因而对甲骨卜辞中的日期进行推排,就出现了很多结果,而且还难以验证和确认。幸好,在5块甲骨的卜辞中发现了含有日期的月食记录,而利用月食记录来探索商代历法应该是一个比较可行的办法。《合集》11485甲骨上有著名的“乙酉夕”月食记录,其卜辞如下:(1)癸亥卜,争贞:旬亡。一月。三(2)癸未卜,争贞:旬亡。二月。三(3)癸卯卜,[争]贞:旬亡。二月。(4)卯[卜],贞:[旬]亡。五月。(5)未卜,[贞]:旬亡。三(6)癸未卜,争贞:旬亡。三日乙酉夕月有食。闻。八月。[1]这也是5次有日期的月食记录中最详细的一次记录。对于这次月食记录,研究者很多,推排出来的日历也很多。但是,几乎所有的推排,都只关注于“乙酉夕月有食”,而忽视了“八月乙酉”,更忽视了“二月癸未”和“二月癸卯”。现将各家所推排的结果汇总如下[2-5],同时也利用SkyMapPro11和《寿星天文历》等天文日历软件进行了复核,并增加了前1500年至前1000年间各家未列出的若干八月乙酉月食的可能结果,推排出了二月癸未、癸卯的日历和殷墟地区(北纬36°07’12”,东经114°19’07”)可见到月食的时间,表中带号的为该年有闰月。从上表可得,即使不管年首月建,在前1500年至前1000年期间,满足“乙酉夕月有食”条件的诸多月食中,只有前1320.6.8和前1036.8.16这两个日期又同时满足“二月癸未”和“二月癸卯”。而这两个结果,前1320年的年首是正月建戌,而前1036年在大多数武王伐纣的假说[6](包括《夏商周断代工程》[7])中已是落在西周年代了。面对这样的结果,有学者就假设商代历法是以新月初见(籫)为月首,月长有31日也有25日,岁首月建为建午或建巳或建未等等。[2]这样,不仅上表中的大多数月食都可以满足,而且更多乙酉日的月食也都能满足了。但是,如果真是这样,那么利用卜辞日期来进行断代也就是不可能的事了,因而这些假设是难以接受的。[8]再看同样著名的“大龟四版”之四。“大龟四版”之四为《合集》11546(即《甲编》2122),其有日期的卜辞及其日历分析如下。“大龟四版”之四的日历分析表明,这是一段很正常的日历。同时也反映出,商代历法对月长的控制是很精准的,这实际上也反映出商代历法对朔日的观测或推算是很精准的。再看“乙酉夕月有食”(《合集》11485)的卜辞,这里值得探讨的一个问题是卜辞“三日乙酉夕月有食”这几个字是癸未卜日所刻,还是乙酉日之后所刻?如果是乙酉日之后所刻,那就意味着所有或大多数卜辞都是事后补刻,卜的意义等于是记事即事后记录。如果是癸未卜日所刻,那卜的意义就是事前预测,如果是这样,那就意味着商代已具有对月食的推算能力了,可以在3日前进行预测和预告。过去对西周历法的研究,发现西周历法是粗放的,譬如岁首多为建子、建丑,认识朔以前,以“籫”为月首等等[7](P19),所以就推想周以前的历法也必然是更加原始。但是,从殷墟甲骨卜辞中所表现出的对朔日的精准和对月食的预测可以看到,商代历法的水平要远远高于西周历法。或许正因为此,才有《尚书·周书·洪范》所记载的武王克商后专访于箕子求教。这表明周人虽然夺取了政权,但是周人并未能从殷人那里完全得到和继承殷商文化,包括商代历法的推算技术甚至是观测技术。通过一二次求教是不可能得到真传的,因而,最初的周文化(尤其是历法)有可能是远低于殷商文化的。经过上述对“乙酉夕月有食”和“大龟四版”之四日期的分析,可以感到,殷人对朔日的观测或推算是很精准的,甚至殷人可能已经可以推算和预测月食了。对于“大龟四版”之四的日期,徐伯鸿先生认为是在前1321年9月至前1320年5月。[9]但是此结果的年首是正月建子,与传说中的“殷正以十二月”不同。而如果以年首为正月建丑,则在前1400年至前1000年间,未有符合“大龟四版”之四日期的日历。综上所述,通过对“乙酉夕月有食”和“大龟四版”之四日期的分析,虽然显示了商代历法的精准,但是却没有得到令人满意的实际日历,商代历法究竟还隐藏了哪些秘密?二、商代历法的特征《史记·历书》:“夏正以正月,殷正以十二月,周正以十一月。”《汉书·律历志》:“……冬至。于夏为十一月,商为十二月,周为正月。”《左传·昭公十七年》:“火出,于夏为三月,于商为四月,于周为五月。”这就是“夏是正月建寅,商是正月建丑,周是正月建子”的来历。《汉书·律历志》:“微公二十六年正月乙亥朔旦冬至,《殷历》以为丙子”。《汉书·律历志》里多次出现“《殷历》以为……”,此“《殷历》以为”并不是《殷历》认为朔日应该是丙子,而是《殷历》认为乙亥日应该是丙子日,即《殷历》的日干支比现行阴历要提早一天。按照上述说法,商代历法(即殷历)的特征是正月建丑,并且日干支比现行阴历要提早一天,这或许就是长期被人所无视的殷历的秘密。由此重新推排“乙酉夕月有食”的日期,得到前1400年至前1000年间的唯一结果如下。这是前1129年8月24日殷墟地区可见的月食,月食于04:06:23开始,05:10:48食既。当天05:08:05天亮,即这次月食在当地天亮前已开始有一小时,至天亮前已近食既,因而这次月食是可以观测到的。也重新推排“大龟四版”之四的日期,得到前1400年至前1000年间的唯一结果如下。前1166年有闰卯月,此年份是符合设置十三月的。“乙酉夕月有食”和“大龟四版”之四日历的存在,可以表明殷墟甲骨卜辞的日期记录是可信的和真实的,也可以表明商代历法具有如下特征:1.殷历是正月建丑,《史记》、《汉书》和《左传》的说法都是正确的;2.殷历的日干支比现行阴历要早一天,《汉书·律历志》引用的《殷历》也是正确的;3.殷历的月首初一是朔日,可见殷历对朔日的观测或推算是非常精准的;4.殷历是数字纪月,且有十三月。根据“十三月”是在子月的情况,说明殷历并不存在年终置闰,或者说,殷历根本就没有置闰月的观念和做法。殷历应该就是以冬至出现后的次月作为年首之月,然后就用数字连续纪月,直到下一个冬至月。平年为十二月,遇到闰年就有十三月。三、商代历法的再验证1.月有食卜辞中的日期迄今所发现的殷墟甲骨卜辞中,共有5次是含有日期的月食记录,分别是在《英藏》886和885、《合集》11482、《合集》11483、《合集》11484、《合集》11485等甲骨卜辞中。除已讨论的《合集》11485之外,其他4次月食记录如下:《英藏》886的卜辞:癸[卯卜],贞:[旬]亡。癸丑卜,贞:旬亡。七日己未皿庚申月有食。二癸亥卜,贞:旬亡。二癸酉卜,贞:旬亡。二癸未卜,争贞:旬亡。王曰:有崇。三日乙酉夕皿丙戌允有来入齿。十三月。二王曰:有崇。[2](P27)《英藏》885的卜辞:[癸丑卜],[贞]:[旬亡]。[七日]己未夕皿庚申月有食。癸亥。癸未。十三月。癸巳卜,贞:旬亡。癸卯卜,贞:旬亡。[2](P29)《合集》11482的卜辞摘选:癸亥贞:旬亡。旬壬申夕月有食。[2](P20)《合集》11483的卜辞摘选:[癸]未卜,争贞:翌甲申易日。之夕月有食。甲雾,不雨。[2](P42)《合集》11484的卜辞摘选:[己]丑卜…六日[甲]午夕月有食。[2](P46)对于《英藏》886和885的月食记录,应当考虑此月食之年是有十三月即有闰月的。按殷历正月建丑,则十三月应当是在子月。经过推排,得到前1500年至前1000年间殷墟地区可见到的“己未夕皿庚申月有食”的结果如下。如果“己未夕皿庚申”是指从己未夜晚到庚申白天之际,则唯有前1315年2月16日的月食是符合的。如果“己未夕皿庚申月有食”这几个字是癸丑卜日所刻,也就是“己未夕皿庚申月有食”是七日前的预测,那么实际月食时间与其预测之间有所偏差,也是可能的,如此则表列的3个结果都是符合的,而优选前1269年8月12日。对于《合集》11482、《合集》11483、《合集》11484的月食记录,因为没有记录月份,这样所对应的日历就有很多。仅前1280年至前1100年间,就有如下诸多结果。2.大龟四版卜辞中的日期“大龟四版”于1929年秋在小屯村北出土,为4版有字大龟甲,收录于《甲骨文合集》,编号分别为《合集》339(即《甲编》2124)、《合集》557(即《甲编》2123)、《合集》9560(即《甲编》2121)、《合集》11546(即《甲编》2122)。[10]大龟四版之四(《合集》11546)前已讨论。大龟四版之一(《合集》339)和大龟四版之三(《合集》557),其日期记录没有特殊性,可对应的日历很多,故不予讨论。大龟四版之二(《合集》9560)略有特殊,其卜辞摘选如下:(1)甲子卜…(3)壬午卜…(4)…三月。三(5)己丑卜…(7)甲午卜…(9)丁巳卜…三月。二(10)…[1]还有一种释读的顺序为:三月壬午,三月丁巳,中间还有己丑、甲午、戊子。[9]因此,根据不同的释读顺序,大龟四版之二的日期排列可能是:(一)甲子、壬午、己丑、甲午、丁巳,相隔53天;(二)壬午、己丑、甲午、戊子、丁巳,相隔95天。即便是只考虑注明月份的壬午和丁巳之间,相隔也要有35天,即大于30天。因此,大龟四版之二的日期是具有特别原因的。如何解释这些日期,这就有必要探讨一下卜辞的刻辞行为。首先,同一块甲骨上的卜辞不一定都是在同一天所刻,这一认识是关键的,同一块甲骨上有不同的日期可以作为证据。其次,甲骨上卜辞的日期不一定都是连续的,有的可能是跳跃的或中间缺省的,以《英藏》886和885卜辞为例,根据日历推排,其月食之月至十三月中间相隔有好几个月,还有很多类似的甲骨卜辞也可以作为证据。这些都表明了一个事实,即一块甲骨会被反复多次使用和刻辞,相隔时间可能是几天后,也可能是几个月后,是不是也可能是几年后?为此,就可以假设大龟四版之二的卜辞,不是同一年所刻。也就可以解释三月的天数为何会大于30天,不是因为日期混乱,而是所刻之日分别是在不同年份的三月。按此假设,对大龟四版之二的两种不同释读顺序的日期各举一例如下。3.征夷方卜辞中的日期李学勤先生研究后发现,征夷方可以分为两个阶段:第一阶段:十二月癸酉己卯在辛巳在壬午在十二月癸未在,步于?甲申在?乙酉在?步于淮丙戌在淮,步于□庚寅在(次)第二阶段:壬寅今日步于永正月癸卯在攸侯喜鄙永乙巳在温,今日步于攸癸丑在攸正月癸亥在攸乙丑在攸二月癸酉在攸[11]比较一下征夷方卜辞“十祀九月甲午”和“十祀十二月甲午”:(一)甲午王卜…从侯喜征尸(夷)方…在九月…惟十祀(二)甲午王卜在(次)…在十月二,惟十祀可以发现,“十祀九月甲午”可划入第二阶段,“十祀十二月甲午”可划入第一阶段。[8](P248)据此可再进一步假设,这不仅是两个阶段,更可能是两次征夷方,即可能是两个商王各自在其十祀之年所发动的征夷方。按此假设,可推排出两次征夷方的日历如下(表中阴历为殷历)。四、结语经过对“大龟四版”、“乙酉夕月有食”、“己未夕皿庚申月有食”和“征夷方”等卜辞中日期的分析和日历的推排,验证了殷历确实是年首正月为建丑,月首初一为朔日,而殷历的日干支比现行阴历要提早一天。同时还表现出,殷人对朔日的观测或推算是非常精准的,殷人可能已经可以推算和预测月食了,或许殷人可能已经知晓“日食在朔,月食在望”了。总之,殷墟甲骨卜辞所体现出来的商代历法的水平是很高的,是要远远高于后来的西周历法的。参考文献:[1]胡厚宣.甲骨文合集释文[M].北京:中国社会科学出版社,1999.[2]常玉芝.殷商历法研究[M].长春:吉林文史出版社,1998.。