"千岁之日至可坐而定也"(巜孟子.离娄下》)
人类走出蒙昧时代,开始进入原始的氏族部落时代。人类的活动范围扩大了,农业生产也逐渐普及,这时度量时间就成为人类社会首要的“科学课题”。
人类知道,白天黑夜可以度量一天的长度;月圆月亏可以度量一月的长度。但是日、月的周期太短,不便于记录。人类可以认识到的更长一些的时间单位就是四季交替(也就是一年),四季交替的时长也是有规律的,但是度量起来并不简单。确定一年的长度,首先要确定一年的起止,时间毕竟是无法“刻录”的,只能确定某个标志性的时间点。最早人类就是选择某个物候作为一年起止的标志。比如:草木发芽的第一天、河水开始泛滥的第一天等等。这种度量方式只能是“大约摸”,不仅不精确,而且随着人类社会的扩大,不同地域之间也很难协调。我们想象一下:武王会和天下诸侯,约定草木发芽那天集合,南方诸侯和北方诸侯到达的时间可能会相差一个多月。
人类通过千百年的观测,发现日影的长短也可以作为一年起止的标志。一年之中日影有最短和最长的两天,夏至和冬至。早期的人类在平地上竖起一个杆子,用绳子测量日影长短。由于测量中存在测长不测短的原理,日影最短受误差的影响大,不容易测量。所以冬至日影最长就成了人类确定一年起始的标志。
测量日影最长说起来简单,但是实际执行起来也并不容易。我们知道,所谓冬至是地球处于远日点的那一时刻。由于地球自转和公转不同步,地球运转至远日点时,还要自转一个角度,才能回归到上一个远日点。所以地球的一年,并不是整数日。冬至点也并不都在白天,也可能在晚上。所以测量日影也不可能完全准确。中国的先民经过长期探索,掌握了冬至前后几天的日影平均值进行推测的方法。《尚书.尧典》中有“期三百有六旬又六日”的记载,说明在三代之前,人类对一年长度的测量还不是那么精确。《尚书.大禹谟》中记载“羲和(掌管历法的官员)废厥职……昏迷于天象”。由于计量一年的长度不精确,经过多年的累积,导致历法背离了实际的节气。至少在周代(上至夏代),中国人已经测算出两个冬至日之间的长度是三百六五天又四分之一天。
冬至是一年起始的标志性一天,但是并不一定是岁首,岁首的确定,与政治、经济、社会、宗教、文化等因素密切相关。汉代以前,只有周代历法以十一月冬至为岁首。只要能确定岁首与冬至之间的换算关系,那么孟子所说的“日月之高也,星辰之远也,苟得其故,千岁之日至可坐而定也”,就不是一句空话了。
司马迁的《史记.历书》中的《历术甲子篇》,就生动的为后人演示了坐定“千岁之日至”的过程。
《历术甲子篇》的核心有两个,一个是岁首和冬至日的确定,一个是岁首与冬至日的换算关系。
司马迁作《历术甲子篇》的时代背景是汉武帝改秦历,当时各史、历天官共献上历法十八部,最终汉武帝采纳了邓平的“八十一分历”即“太初历”。司马迁的《历术甲子篇》也是被弃用的十七家历之一。司马迁将其载于《史记.历书》之中,得以保留。
司马迁构筑了一个包含:日、月、岁、时,章、蔀、纪、元的宇宙论。
一章为十九年。十九年中增加七个闰月,日、月的运转周期正好重合。
一蔀为四章,即七十六年。岁首如果从甲子日起计,冬至从岁首的前一年的癸卯日起计,七十六年后冬至正好又回复到癸卯日。
二十蔀为一纪,即一千五百二十年。一千五百二十年后,岁首正好回归到甲子日。
孟、仲、季三纪为一元,即四千五百六十年。一元复始,气节、朔日都回归到原点。
司马迁要构建这么一套历术,着重解决的是岁首日的确定、冬至日的确定以及岁首到冬至之间的换算关系。
司马迁祖上“文史星历,近乎卜祝之间”,精通三代历术。所以司马迁响应汉武帝的改历政策,综合运用了三代历法之长处。
首先岁首日的确定,司马迁采用了夏历正月建寅,这一点和汉武帝不谋而合。但是二者的出发点并不相同。汉武帝是从政治角度,“率应水德之胜”,改用正月岁首的。而司马迁是从符合农业生产的角度,提出“于时冰泮发蛰,百草奋兴,秭归先滜”,所以“建正作于孟春”。
其次冬至日的确定。司马迁确定冬至日,是以周历的四分历,即两个冬至日之间时长为三百六五又四分之一日进行推算。汉武帝采用的太初历,是以月定日,推算一年。 太初历推算一年的误差大于四分历,所谓“八百年后差一日”。
最后冬至日和岁首日之间的换算。司马迁采用的可能是殷历算法,即用甲子周期计算。周历是以九百四十作为计算周期、太初历是以八十一作为计算周期。司马迁的甲子六十周期,应该是有其独特之处。
司马迁在计算之前,先要对所有的日期进行归零。以汉武帝太初元年冬至为甲寅年十一月甲子日子夜为第一个冬至日。这个设定与实际历法并不符合,汉武帝太初元年是丁丑年。司马迁的设定,明显是为了套用章、蔀、纪、元,建寅岁首、甲子冬至的架构。
司马迁计算岁首日,并不是直接计算正月初一,而是间接的计算十一月初一,也就是冬至日所属的月。因为十一、十二月没有闰月,所以十一月初一确定了,正月初一也就推断出来了。
司马迁通过归零设定第一个十一月初一和冬至日为同一天都是甲子日。第二年,要计算两个“大余”。第一个“大余”是计算第一年十一月初一到第二年十一月初一。一年三百五十四天(如果该年为闰年,再加二十九天),除以甲子周期六十,“大余”为五十四。那么从甲子往下推五十四,即为戊午。也就是说,第二年的十一月初一为戊午日,这叫“月朔旦甲子日法”。
第二个“大余”是计算第一年冬至到第二年冬至。两个冬至日长正好是三百六十五又四分之一日,,除以甲子周期六十,余数取整,即“大余”五日。从甲子往下推五,即为己巳。也就是说,第二年的冬至日为己巳日。这叫“日朔旦甲子日法”。
再往下推算时,还要把上年的余数加到本年,除以六十,以此类推。
司马迁除了计算两个“大余”,还计算了两个“小余”。“大余”计日,“小余”计时。“小余”的算法是另一套太阴历的逻辑,这里就不详述了。
司马迁在《历术甲子篇》中列举了从汉武帝太初元年开始,一蔀七十六年的推算过程。岁首日和冬至日采取“月朔旦”和“日朔旦”两种不同的计算方法,是因为:两个冬至日的时长是固定的,即地球公转周期;而两个岁首日的时长不固定,需要根据一年的实际天数确定。按照司马迁的历法计算,七十六年下来,地球公转周期和日历天数是完全吻合的。如果一直算下去,一纪一千五百二十年的岁首、冬至都是可以准确的推测出来的。
诗曰:蒙昧出大荒,蠡测日影长。
羲和钦昊天,允迪厥历象。
夏正惟建寅,周行四分阳。
千载至日定,司马书华章。