书城文化中国历史文化百科——天文学
16124500000015

第15章 中国古代天文历法和天文学交流传播(1)

精良的古代历法

历法的发展大致经历了三个主要阶段,在原始人熟练地掌握天象规律之前,他们显然是通过观察物候的变化来决定时间和季节的,因为像候鸟的迁徙、草木的枯荣等现象都明显地表现出某种周期。

比物候历进步的历法是观象授时,古人根据某些星象的出没和在天空中的位置来断定时间,这种做法使他们对于天象规律的了解日益精深,从而为历法最终进入先进时代奠定了基础。

中国的传统历法是一种兼顾朔望月与太阳年的阴阳合历,这种历法以日、朔、气为基本要素。根据气、朔的变化,中国古历可以划分为三个时期:

从商代到唐初是使用乎气、平朔的时期,唐初到明末是使用平气、定朔的时期,清代以后才进入使用定气、定朔的时期。很明显,中国古代历法的完善过程,实际也就是这些要素逐渐精确化的过程。

甲骨文中的商代历法

商代甲骨文所提供的盘庚迁殷以后的历法情况时,经愈来愈清楚了。可以肯定地说,殷历是一种阴阳合历,年有平、闰,月有大、小,岁首和月首都已基本固定。当时的历法显然已处在从观象授时向推步历法过渡的时期。

在中国文化中,最古老的记日法并非以太阳或月亮为依据,而是一种干支周期体系,它是将一组包括十个字的天干和另一组包括十二个字的地支配合起来,从甲子一直到癸亥,周而复始地循环下去。李约瑟曾将这个周期形象地比作两个相互啮合的齿轮,一个轮有十二齿,另一个有十齿,这样,配合六十个组合序数后,新的循环便又开始了。甲骨文中这种记录六十干支的日表随处可见。从大量的占卜记录来看,干支记日的体系无疑在系统地、严密地实行着。

有人把中国的干支记日体系看作是巴比伦天文学影响的结果,因为从形式上看,用六十日作为一个计算单位无异于一种六十进位制,这种进位制在中国是绝对找不到的,而它却恰恰是巴比伦数学的特点。这些看法其实并不正确,正如我们在第一章中已经谈到的那样,十干实际来源于中国独特的十进制体系,在干支六十周期体系出现之前,它早已作为纪日单位单独使用了,这种做法的遗迹在甲骨文中仍然可以看到。但是,十天的循环周期毕竟太短,它甚至使同一日名在一个月内都不可避免地要重复出现,这无疑给准确记录日期带来了困难。古人可以最初采用了一种以“上”、“中”“下”等前缀词配合天干(如上辛、下辛)的方法来区别那些在一月之内多次出现的日名,但很不方便,于是天干与地支相配的形式便应运而生了。这种做法把一个循环周期从过去的十天扩大到六十天,使日期至少在两个月内不会重复,因此无论从怎样的角度讲,六十干支体系对于记日都是一种最理想的形式,而当新的体系形成之后,原有的十干记日法则以旬的形式保留了下来。

殷历的一个完整历日统赅昼夜两段,昼称“日”,夜称“夕”。“日”表示历日的前段,这意味着夕、日之交应是一日的开始。在较早的卜辞中,白天的最早时段称为“旦”,“旦”是日出的象形文,同时也是历日的起点。这种情况在晚殷可能有所改变。商人又用“今”表示目前所在的时间,用“翌”与“来”表示未来的时间,但在限定历日的时候,通常“翌”指次日,而“来”则指未来二日以后。“昔”是表示过去的时间称谓,这个字与另一个甲骨文“灾”字有着相似的结构,它们都是由水患这个最基本的意义引申出的不同字义,这使人很自然地联想到广为流传的史前洪水传说。似乎可以肯定,商人用描绘水患的字来表示过去,大概当时的人们对远古时期的那场灾难仍记忆犹新。

殷历实行以月亮的朔望变化为周期的太阴月,由于月球绕地运行的周期并非整数,约为29天半,而实际布历又不可能出现半日,这导致丁使用太阴记月的历法必须有大小月的安排。殷历大月30日,小月29日,虽然有关大小月的排列规律目前还不清楚,但从殷历的岁实和闰法来看已不会很混乱。

殷历已使用朔日作为月首,当时的朔日可能是通过观测残月和新月取其中而得到的,显然这与现代天文学的朔的概念有所不同,它虽不是指日月黄经相同的时刻,但确是一个不见月光的日子,而且与真朔不会超过1日的误差。众所周知,平朔的长度为29.5306日,使用平朔的历法久之则不能合天,这种现象直至汉代还时有发生。殷历的情况不会比这更理想,朔晦月见的情况恐怕也是常有之事。我们发现,殷历历月存在一种朔策为31天的大月,这在使用平朔的历法中简直是不可想象的,多出的一日我们称为闰日,它可能是为调整朔晦月见的误差而有意安排的。

由于太阴年(354~355日)与太阳年(365日)的长度不同,所以每隔二至三年便要插入一个闰月,这种平衡阴阳历的闰法在殷历中也已形成一定的规律。殷历的一部分闰月置于年终,称为“十三月”,另一部分闰月置于年中,重复前月的月名,但这并不意味着当时存在两种截然不同的闰法。研究表明,殷历闰月的安排与分至点的位置几乎是吻合的,这使我们有理由作出这样的判断:二分二至与殷历历月本应具有固定的对应关系,一旦这种关系失衡,分至在应该出现的月份没有出现,置闰便成为唯一的凋节手段。事实上,这种闰法只是《尧典》确立的“以闰月定四时成岁”的古老方法的延续,由于它必须随时观测,因而带有更大的原始性。

殷历实行太阳纪年,年的长度大约在365至365.3日之间,显然已很接近四分历的岁实。与后代的情况稍有不同,秋分点在当时应该是一个颇为重要的历法基点,它同时充当了农年与历年两个周期结束的标志。

殷历的历年称为“年”或“岁”,与人们用月亮的象形字“月”表示历月的传统不同,“年”、“岁”在表示回归年的意义上则与天象无关。“岁”字本像农具,“年”字则是丰收祭祀的象征,这意味着商人用它们作为历年称谓,实际是由表示农业周期(农年)的名称转借而来的。这种联系显示了一个重要的事实:商代的农业周期与殷历历年周期是合而为一的,确切地说,这种结合是从这两个循环周期的终点开始的,商代一个农业季节的结束,也就标志着殷历一个历年的结束。这使古人很自然地懂得,当农作物收割完毕,人们陶醉于丰收的喜悦中的时候,新的一年便悄悄来临了。

甲骨文所反映的殷历实际岁首在秋分后的第一个月,这个时间相当于农历的九至十月,在殷正期间,商入主祀的大火星将重新在晨曦中从东方升起。这套完整的授时体系无论从观候星象或测度日影哪方面考虑,都是严密的。

殷历的季节体系为独立于历年的特殊周期,全年共分冬、春两季,没有夏、秋。冬季为第一季,自殷历三月至七月(相当于农历十一月至次年三月),长约五个月。春季为第二季,自殷历八月至次年二月(相当于农历四月至十月),长约七个月历年并不同步。冬季的起算大致从冬至点开始,而春季则包容了整个农季。这些特点在西周时期的豳历中仍然完整地保持着。很明显,殷历季节所具有的这种农业季节周期的性质,使它只有在与分至四节体系结合之后才能最终形成传统的四季,这种变化事实上到了西周末年或春秋初叶才真正完成。

三正与古六历

对于秦以前的古历,今天能够真正说清楚的内容并不很多。自古以来,人们为概括夏、商、周三代历法,始终把“三正”视为当时的正朔。通行的解释是,“三正”为三种以不同月份作为岁首的古历,相传夏历以建寅之月为正月,殷历以建丑之月为正月,周历以建子之月为正月。因为子月为冬至日所在的月份,所以按地平方位排列,丑月和寅月应分别代表冬至所在月之后的第一月和第二月。

虽然夏历用寅正的说法还很难得到证实,但卜辞所反映的殷历情况却足以显示当时的历法与丑正殷历相去甚远,同时西周金文所表现出的周历岁首似乎也并不是固定不变的。这使入相信,包括夏历在内的“三正”被认为是三代正朔更迭的看法其实毫无根据。

《夏小正》始终是被当作一部夏代历书看待的,它的以物候和星象授时的内容确实比殷历显得更古老,但是从语言学所反映的事实看,它的成书年代却肯定不可能那样早。一般认为,《夏小正》可能是战国时代的作品,但书中应该保留了比这个成书时代早得多的历法内容。

春秋历法已经进入推步时代,当时的古历使用四分术是没有疑问的,因为在春秋前期,人们对于冬至的测定已比较精确,尽管如此,春秋历在鲁宣公(公元前608~591年)以后,各种推步术还是有了显着改善。这种认识得益于《春秋》经中33次可靠的日食记录,宣公以前,大小月的安排似乎还看不出有明显的规律,置闰法也还不够完善,但宣公以后的情况却大不相同,连大月的安插完全符合了每15至17个月有一次的间隔规律,而且日食的推算与朔日的推算也近乎吻合。这表明,当时对于朔望月的长度,甚至日月合朔的时刻都能推求得相当精确。

历法之所以复杂,只是由于它所依据的各种基本周期不能相互整除,因此人们很希望能在一个相对长的时间间隔之后使这些周期大致相合,于是各种谐调法相继出现。谐调法的产生显然是以准确掌握不同周期的精确数值为基础的,而在春秋时代,相关的知识无疑已经具备。我们知道,四分术回归年的长度为365.25日,而朔望月的平均长度为29.5306日,积1∶2个朔望月得354~355日,比回归年少10~11日,三年则少约33日,即使设置一个闰月,奇零仍然很大,无法使两个周期完全整齐。后来人们发现,19个回归年的长度为6939.75日,这与235个朔望月的长度几乎相等,是得到了以下的关系:

365×19=6939=29×235=29×(12×19+7)由此可以看出,四分历的岁实(365)和朔策(29)是如何规定的。根据这个原则,19年中必须安排7个闰月,结果同一历日经过19年又逢同一季节,这个周期在中国古历中称为一“章”或“太阴周”。四个太阴周(章)合计76年或27759日,古代称为一“部”,经过这个周期,同一历日可以回到同一天的同一时刻,假如起算日为朔日冬至夜半,那么76年之后又将回到朔日冬至夜半。这是四分历的一个完整的气朔日循环周期。然而一部以后,冬至虽重新回到朔日夜半,但却并不一定回到同一个干支日期,因为一部的日数不是60的整数倍。如果将一部扩大20倍,得1520年或555180日,这个周期就是一“纪”,一纪之后,年、月、日、合朔、节气和干支都将回到原来的位置。古人又以三纪为一“元”,凡4560年,这就是历元。历元的日数和年数都是六十的倍数,如果用干支法纪年,则经过一元,年、月、日、合朔、节气、纪日于支和纪年干支将全部回到起始的状态,这是四分历的基本结构。

历元是古人设定的一个理想的历法起算点,它实际是年月日各周期的最小公倍数。这个时间确定以后,只要将回归年或朔望月周期不断叠加,此后各年的冬至及合朔时刻即可方便地推出,继而一年中其他节气和弦、望时刻也可依次算出,这样,一年的历谱便可编算出来了。

在上述各种谐调周之中,一章是最为基本的周期,关于19年7闰法的完善过程,春秋时代显然已经完成,而且至少在进入战国时期以后,以章为基础的各种谐调周也都已出现。

战国时期的历法如同这个时代一样混乱,虽然我们对当时的历制情况了解得并不透彻,但是,如果把它作为早期历法发展过程中的一个环节来看待,这种混乱恐怕至多只表现为岁首的不同。当时的各种历法显然仍然普遍采用四分术,而且比春秋古历更加成熟。汉代文献保留了六部战国古历,《汉书·艺文志》记载说:

黄帝五家历三十三卷,颛顼历二十一卷,夏、殷、周、鲁历十四卷。

对这六部古历而言,相对来讲我们了解得最多的只有颛顼历,因为它在汉初还在利用。不过根据文献的记载,古六历同系四分历是可以肯定的,它们的区别仅在于岁首气朔的差异,因而各自求得了不同的历元。《后汉书·律历志》介绍了古六历历元年份的年名,按照当时的干支纪年法,六个历元年是:黄帝历用辛卯,颛顼历用乙卯,夏历用丙寅,殷历用甲寅,周历用丁巳,鲁历用庚子,然而这并不意味着古六历像它们的名称所标示的那样属于春秋以前各个时代的古老历法,尽管这一点自汉代以后曾有很多人深信不移。对古六历的实际计算结果表明,它们的合天年代大致都在公元前五至三世纪的二百年间之内,显然,这些历法都应是战国时代,创制的四分术。祖冲之早在大约古六历创制的七百年后,即已敏锐地察觉到这种名实不符的矛盾,并提出了与今天的分析几乎一致的看法。

汉《太初历》的改革

早期阴阳历的编算较纯阳历存在许多困难,其中重要的一点是对朔策的真值很难准确取得,因而经过一段时间的积累,历法的误差便比较明显,从而需要制历者重新加以测算,改革旧历。自秦汉以来,中国古历的改革不下百次,而朔策的计算也正是在这一次次的改革中逐渐地趋于精密。

历法改革在汉代以前已经存在,今天所能知道的最早的一次改历则发生在汉武帝时期。汉初继秦行用颛顼历,但颛顼历在当时的误差已使人们在朔晦这两天本不应该见月的日子也看到了月亮,这使汉武帝不得不下诏改历。促使汉武帝废弃旧历的另一个原因是,根据当时的测算,元封七年十一月甲子夜半适逢合朔和交冬至;这被认为是历元的理想时刻。

公元前104年,汉都长安城贴出了招募天算家来京制历的公告,接着从全国征募到20多人,邓平、落下闳、唐都、公孙卿等都在应征之列。汉武帝比较,当时收集到的18种历法的优劣,最后命司马迁采用邓平的历法,这就是着名的《太初历》。

同年,改元封七年为太初元年,《太初历》颁行。