《史记》所载武王伐纣年月日考

2024-07-20 00:00:00孙锐泽
今古文创 2024年26期

【摘要】司马迁在《史记》中记载了武王伐纣的年月日,这为后世研究武王伐纣的公历年月日提供了宝贵的史料。然而,《史记》记载的武王伐纣的年月日,相互之间却存在歧异。究其原因,当是司马迁在记载武王伐纣的年月日时依据了不同的历法建正,导致记载不一致。本文结合其他文献的记载,并依据相同的历法建正,对其进行了重新梳理,认为武王伐纣的年月日当是如下:观兵盟津当是周武王十年,牧野之战当是周武王十二年;若依据的历法建丑,则师渡盟津当是周武王十二年正月戊午日,牧野之战当是周武王十二年二月甲子日;若依据的历法建寅,则师渡盟津当是周武王十一年十二月戊午日,牧野之战当是周武王十二年正月甲子日。本文的观点,希望能为将来进一步研究武王伐纣的公历年月日提供帮助。

【关键词】《史记》;武王伐纣;历法

【中图分类号】K224 【文献标识码】A 【文章编号】2096-8264(2024)26-0071-03

【DOI】10.20024/j.cnki.CN42-1911/I.2024.26.022

一、先秦时期的历法建正

从传世文献来看,先秦时期的历法建正与今天的建寅不同,主要有建子、建丑、建寅三种。杜预曾云:“庄伯之十一年十一月,鲁隐公之元年正月也。”[1]897此说当依据《竹书纪年》。《史通·摸拟》载:“春秋诸国,皆用夏正。鲁以行天子礼乐,故独用周家正朔。”[2]373由此可见,当时不同的国家采用的历法建正往往不同。究其原因,主要是由于当时的天文历法水平远没有今天这么科学。历法建正的不同,导致关于同一事件发生的时间,文献记载经常不一致。陈美东先生曾对《左传》记载的年月日进行研究,发现其历法建正并不统一,他认为当是其作者杂采了依据不同的历法建正的文献所致。[3]成书于战国时期的《左传》尚且如此,就更不要说成书于西汉时期的《史记》了。《史记》关于武王伐纣的年月日的记载,当免不了杂采依据不同的历法建正的文献。

此外,传说周人建子,即西周历法的岁首在冬至所在之月。如《史记·历书》载:“夏正以正月,殷正以十二月,周正以十一月。”[4]1095本文认为此说有待商榷。王胜利先生曾对《春秋》记载的年月日进行研究,发现春秋时期的鲁国仍然把本国历法的正月称为“王正月”,其所谓的“王”当是周王,他认为当时的鲁国仍然在遵奉周王正朔,鲁国历法的岁首仍然和东周王历的岁首保持一致。他还对西周历法进行研究,认为东周王历当是对西周历法的继承和发展,如果了解了东周王历的岁首情况,对于了解西周历法的岁首情况具有重要意义,但是有关东周王历的资料早已失传,如今的学者只能依据《春秋》记载的鲁国历法的资料,来间接地了解东周王历的岁首情况,进而对西周历法的岁首情况有一个大致的了解。[5]本文赞成此说。

陈美东先生通过对《春秋》记载的年月日进行研究,认为鲁国历法在公元前656年之前多建丑,即岁首在冬至所在次月,确定非建丑的年份占6%;后多建子,即岁首在冬至所在之月,确定非建子的年份占10%。[3]由此可见,东周王历的岁首在春秋前期也应该是以建丑为主,在春秋中后期则应该是以建子为主。相应地,西周历法也应该是以建丑为主。

二、《史记》所载武王伐纣的年月日

关于武王伐纣的年月日,《史记·殷本纪》载:“周武王于是遂率诸侯伐纣。纣亦发兵距之牧野。甲子日,纣兵败。”[4]79《史记·周本纪》载:“九年,武王上祭于毕。东观兵,至于盟津……乃还师归……十一年十二月戊午,师毕渡盟津,诸侯咸会……二月甲子昧爽,武王朝至于商郊牧野,乃誓。”[4]87-89《史记·齐太公世家》载:“九年,欲修文王业,东伐以观诸侯集否……遂至盟津……还师,与太公作此太誓……十一年正月甲子,誓于牧野,伐商纣。”[4]1244-1245《史记·鲁周公世家》载:“武王九年,东伐至盟津,周公辅行。十一年,伐纣,至牧野。”[4]1269据此可知,关于观兵盟津的年代,《史记》载是周武王九年;关于牧野之战的年代,《史记》载是周武王十一年或十二年;关于师渡盟津的月份,《史记》载是十二月;关于牧野之战的月份,《史记》载是正月或二月;关于牧野之战的日干支,《史记》载是甲子日。

三、《史记》所载观兵盟津和牧野之战年代考

关于观兵盟津和牧野之战的年代,《史记》的记载存在歧异。前文已知,《史记》载观兵盟津是周武王九年,牧野之战是周武王十一年或十二年。但是《史记·周本纪》集解却载:“徐广曰:谯周云史记武王十一年东观兵,十三年克纣。”[4]88《史记·周本纪》正义也载:“文王受命九年而崩,十一年武王服阕,观兵孟津,十三年克纣。”[4]88此两处皆言观兵盟津是十一年、牧野之战是十三年,而且此“十一年”和“十三年”当是周文王的纪年。按照此说法,周武王继位后并没有改元,仍然以周文王的王号来纪年,在周文王去世4年后伐纣成功。但是出土文献清华简《耆夜》载:“武王八年,征伐耆,大戡之。”[6]150清华简《耆夜》是先秦古籍,而且在先秦时期就被埋入地下,未经秦朝时期所谓“焚书坑儒”的影响,所以能够最大限度地展现先秦古籍的原貌,可信性当远高于《史记》集解和《史记》正义。据此可知,周武王继位后并没有以周文王的王号来纪年,而是改元以自己的王号来纪年,则十一年观兵盟津、十三年牧野之战说不成立。

古本《竹书纪年》载:“《竹书》:十一年庚寅,周始伐商。(《新唐书·历志》)”[7]42又载:“《竹书纪年》曰:周武王率西夷诸侯伐殷,败之于坶野。(《水经·清水注》)”[7]42今本《竹书纪年》载:“五十二年庚寅,周始伐殷。秋,周师次于鲜原。冬十有二月,周师有事于上帝……十二年辛卯,王率西夷诸侯伐殷,败之于坶野。”[8]77-79“十一年庚寅”和“五十二年庚寅”当是同一年,只是前者是以商王(帝辛)的王号来纪年,后者是以周王(武王)的王号来纪年。但是据唐兰先生考证,“庚寅”二字乃是唐代一行所加。唐兰先生云:“唐代一行依据《尚书·武成》的月日,用他的《大衍历》来推算,认为伐纣应该是庚寅。”[9]但是《大衍历》是唐朝时期推定的历法,具有很大的误差,所得到的结果当是错误的。与“庚寅”相应,“辛卯”也是不正确的。除“庚寅”和“辛卯”外,“五十一年”“十一年”“十二年”当是可信的。《吕氏春秋·首时》:“立十二年,而成甲子之事。”[10]423此十二年是周武王十二年,此言伐纣结束是周武王十二年。综上,本文认为武王伐纣前后经历了两个年头,即伐纣于周武王十一年年末开始,十二年年初结束。据此可知,牧野之战的年代当是周武王十二年。

从《史记》的记载来看,观兵盟津和牧野之战当间隔2年。今本《竹书纪年》载:“五十一年冬十一月戊子,周师渡孟津而还。”[8]77此“五十一年”是商王(帝辛)五十一年。前文已知,“五十二年”和周武王十一年是同一年,则“五十一年”和周武王十年是同一年。据此可知,观兵盟津的年代当是周武王十年。笔者曾在《周文王、周武王去世年龄和在位年数新论》一文中认为观兵盟津的年代是周武王九年[11],现将其更正为周武王十年。

四、《史记》所载师渡盟津和牧野之战月份考

关于师渡盟津和牧野之战的月份,《史记》的记载存在歧异。前文已知,《史记》载师渡盟津是十二月,牧野之战是正月或二月。《尚书·泰誓》载:“惟十有一年,武王伐殷,一月戊午师渡孟津,作《泰誓》三篇。(序)”[12]428此言师渡盟津的月份是正月。结合《史记》的记载,可知师渡盟津的月份是十二月或正月。此两处月份的差异,当是所依据的历法建正不同导致。

《汉书·律历志下》引《尚书·武成》载:“惟一月壬辰旁死霸,若翌日癸巳,武王乃朝步自周,于征伐纣。粤若来三月(当作二月)既死霸,粤五日甲子,咸刘商王纣。”[13]872此言武王伐纣是一月癸巳日从宗周出发,至二月甲子日牧野之战,共历时32天。《逸周书·世俘解》载:“惟一月丙辰旁生魄,若翼日丁巳,王乃步自于周,征伐商王纣。越若来二月既死魄越五日甲子朝,至,接于商,则咸刘商王纣,执天恶臣百人。”[14]195此言武王伐纣是一月丁巳日从宗周出发,至二月甲子日牧野之战,共历时8天。

宗周在今陕西西安地区,这一点毋庸置疑。至于牧野的地点,虽存在多种说法,但大致在今河南新乡、鹤壁地区。[15]西安距离新乡或鹤壁大约有500公里(1000里)。若武王伐纣从宗周出发至牧野之战共历时32天,则平均1天需要行军约32里;若武王伐纣从宗周出发至牧野之战共历时8天,则平均1天需要行军约125里。关于先秦时期的行军,《孙子兵法·军争篇》载:“是故卷甲而趋,日夜不处,倍道兼行,百里而争利,则擒三将军,劲者先,疲者后,其法十一而至;五十里而争利,则蹶上将军,其法半至;三十里而争利,则三分之二至。”[16]117-118由此可见,武王伐纣从宗周出发至牧野之战共历时8天的说法是不现实的,当是一月癸巳日从宗周出发,至二月甲子日牧野之战,共历时32天。

今本《竹书纪年》载:“五十二年庚寅,周始伐殷。秋,周师次于鲜原。冬十有二月,周师有事于上帝,庸、蜀、羌、髳、微、卢、彭、濮从周师伐殷。”[8]77西晋时期的杜预,可以说是非常了解《竹书纪年》的学者,曾云:“皆用夏正建寅之月为岁首。”[1]897《隋书·经籍志》载:“《纪年》皆用夏正建寅之月为岁首。”[17]649由此可见,此“十二月”当是历法建寅。

从武王伐纣的整个进军过程只有32天且戊午日和甲子日间隔只有6天来看,“十二月戊午”当是历法建寅。据此可知,“正月甲子”当是历法建寅,“一月戊午”和“二月甲子”当是历法建丑。(见下表:历法建正)综上可知,若依据的历法建丑,则师渡盟津当是正月,牧野之战当是二月;若依据的历法建寅,则师渡盟津当是十二月,牧野之战当是次年正月。

五、《史记》所载牧野之战日干支考

关于牧野之战的日干支,前文已知,《史记》载是甲子日,世无歧异。青铜器“利簋”铭文(释文依吴镇烽先生)“武征商,唯甲子朝,岁贞,克昏,夙有商。辛未,王在管师,锡右史利金,用作檀公宝尊彝”[18]41-42的记载,更是为牧野之战是甲子日提供了有力证据。

六、关于武王伐纣的公历年月日的一点看法

本文通过对《史记》所载武王伐纣年月日的重新梳理,认为武王伐纣的年月日当是如下:观兵盟津当是周武王十年,牧野之战当是周武王十二年;若依据的历法建丑,则师渡盟津当是周武王十二年正月戊午日,牧野之战当是周武王十二年二月甲子日;若依据的历法建寅,则师渡盟津当是周武王十一年十二月戊午日,牧野之战当是周武王十二年正月甲子日。

关于武王伐纣的公历年代,历来众说纷纭,截至1997年时,就已经有44种说法[19],推定的方法更是多种多样。本文认为,在现有的条件下推定西周王年,要以传世文献和出土文献的记载为主,并结合考古学和天文学的成果进行综合分析,力求将已有的年代系统调整到能够为大多数学者所接受的水平上。笔者曾在《从古本〈竹书纪年〉看西周王年》一文中认为武王伐纣(西周建立)的时间约是公元前1028年[20],现将其更正为公元前1029年,详情会另外撰文论述。

前文已知,西周历法应该是以建丑为主。依据张培瑜先生的《中国先秦史历表》[21],可以推定出如下的历谱。(见下表:武王伐纣的年月日)据此可知,师渡盟津的公历年月日当是公元前1029年2月14日(儒略历),牧野之战的公历年月日当是公元前1029年2月20日(儒略历)。

七、结语

本文通过对《史记》所载武王伐纣年月日的重新梳理,提出了一些观点。当然,本文梳理的也仅仅是《史记》记载的武王伐纣的年月日,并不一定就是真正的武王伐纣的年月日,在此基础上推定出的公历年月日,也并没有十分的绝对性。然而从目前的传世文献和出土文献来看,《史记》记载的武王伐纣的年月日还是可信的。本文无法保证此举能彻底解决困扰学术界已久的武王伐纣的公历年月日问题,只希望能为其将来的进一步研究提供帮助。

参考文献:

[1]左丘明撰,杜预集解,李梦生整理.春秋左传集解[M].南京:凤凰出版社,2010.

[2]刘知几撰,白云译注.史通[M].北京:中华书局,2014.

[3]陈美东.鲁国历谱及春秋、西周历法[J].自然科学史研究,2000,(2).

[4]司马迁撰,裴骃集解,司马贞索引,张守节正义.史记[M].北京:中华书局,2000.

[5]王胜利.西周历法的观象历属性[J].殷都学刊,2004, (4).

[6]李学勤主编.清华大学藏战国竹简(一)[M].上海:中西书局,2010.

[7]方诗铭,王修龄辑.古本竹书纪年辑证(修订本)[M].上海:上海古籍出版社,2005.

[8]王国维撰,黄永年校.今本竹书纪年疏证[M].沈阳:辽宁教育出版社,1997.

[9]唐兰.中国古代历史上的年代问题[J].新建设, 1955,(3).

[10]吕不韦撰,陆玖译注.吕氏春秋[M].北京:中华书局,2011.

[11]孙锐泽.周文王、周武王去世年龄和在位年数新论[J].今古文创,2024,(3).

[12]王世舜,王翠叶译注.尚书[M].北京:中华书局,2012.

[13]班固撰,颜师古注.汉书[M].北京:中华书局,2000.

[14]黄怀信校注.逸周书校补注译[M].西安:三秦出版社,2006.

[15]王仁磊.牧野之战战场地望新探[J].新乡学院学报(社会科学版),2012,(2).

[16]孙武撰,陈曦译注.孙子兵法[M].北京:中华书局, 2011.

[17]魏徵撰.隋书[M].北京:中华书局,2000.

[18]吴镇烽编著.商周青铜器铭文暨图像集成11[M].上海:上海古籍出版社,2012.

[19]北京师范大学国学研究所编.武王克商之年研究[M].北京:北京师范大学出版社,1997.

[20]孙锐泽.从古本《竹书纪年》看西周王年[J].今古文创,2024,(2).

[21]张培瑜编.中国先秦史历表[M].济南:齐鲁书社, 1987.