书城科普时光机器:隐藏在时间中的科学
11199800000020

第20章 我国农历的演化和发展

翻开日历一看,显眼的大号字是表示公历的日期,下面还有一行小号字也表示同一天的日期,这就是我国特有的日历——农历,也称作夏历或阴历。我们已经知道了阳历的由来,那么阴历是怎么来的呢?

“月有阴晴圆缺”,月亮的圆缺,这在古代人看来,也是自然界中相当稳定的一种周期现象,所以,阴历就是以这种圆缺变化的周期来计算时间的,月亮在我国古代叫作太阴,所以由此得来的日历便叫做太阴历,即阴历。

月亮圆缺一次的时间也不是“天”的整数倍,约为29天半的时间。据现代的测量,月亮圆缺一次的时间为29.530589天,合29天12小时44分3秒。古时编排阴历时,人们是怎样确定每月的日数呢?又怎样和阳历协调起来呢?

据史料记载,人们最初采用的日历不是阳历而是阴历。当时他们已经知道,月亮圆缺一次的时间是29天半,因此规定每月的时间轮流地算作29天和30天。29天是小月,30天是大月。这种计算方法1年只有354天,这样,在1年的时间里,阳历和阴历就要相差11天。

为了消除阴历和阳历一年的时间差异,各国太阴历都有自己的一套修正方法。比如早年的回教阴历,把每年轮流算作354天和355天。这样也造成了回教阴历与阳历约11天之差,在公历的33年中,回教徒们就要过上34.个回教年。如果已经知道某一件事发生在回教年的某年、某月、某日,就可以迅速而准确地说出那一天的月相,但是那时到底是冬天还是夏天,只有经过一番复杂的计算,才能回答出来。

我国采用的阴历,实际上并不是真正的阴历,而是“阴阳历”。它既采用月相来计算日期,同时又采用闰月的方法与太阳年协调一致。

由于阴阳二历每年相差约11天,3年就相差约1个月。为了能使这种历法适应天气冷热变化的周期,于是规定每两年或3年增加1个闰月,每19年设置7个闰月。19年为一个闰章,81章为一统,3统为一元,每元是4617年,元之后,又周而复始。

阴阳历在我国已经有3000多年悠久的历史了,早在中国黄帝时代,已经知道1年有365.25日,1月是29499940日,一年有12710月,并以此为基础,编制了我国古代六历:黄帝、颛顼、夏、殷、周、鲁。比如我国采用19年7闰的方法,要比希腊早几百年,这说明我国古代历法是很先进的。西汉末年,刘歆依据邓平的《太初历》而改的三统历,南齐祖冲之编的大明历,唐朝傅仁钧编制的戌寅元历,都是有名的阴阳历。

阴阳历经过历代历法家的整理修改,在我国一直沿用到现在。它与农业有着密切的渊源关系,我们熟知的二十四节气和许多农谚都是以它为基础的,因此人们也管它叫农历。

在世界上真正的阴历早巳废止了,但在我国为了不打破传统的习惯,阴阳历一直保存下来。这就是日历上用小号字排印的农历的日子。

中国第一部完整的历法——《太阳历》

中国古历自秦汉以来共有100种以上。为什么历代如此频繁地改历呢?这是有其原因的。

早在周代,告朔(预告朔日)就是一种权力的象征。封建社会里颁历权是皇权的象征之一,改朝换代往往要改年号、改历法,这是政治方面的原因。

日月食同预推的不符,这是促成修改历法的另一个重要原因。在唐代检验日食预报是否准确关系到天文官的脑袋问题,真是非同小可。事实上节气相差一两天是不明显的,而日月食误差几分钟就会感觉出来。

公元前104年,汉都城长安贴出了招募天文历算家来京制历的通告,接着从全国不少地方征募到20多人,其中有又阡、落下闳、唐都、公孙卿,壶遂等。他们讨论制定了《太初历》,这是流传至今的第一部完整的历法。著名的文学家、历史学家司马迁也参加了制历的讨论。只是司马迁的建议未被采用。大概就是这个原因,司马迁写《史记·历书》,就没有提到《太初历》。

《太初历》规定1个月的长度是294381天,平年12个月,闰年加1个月,19年中加7个闰月,这样计算,每年就是12719月,相当于一年是3653851539天。年和月的长度是制历的两个最基本数据,用现代测量值来比较,这两个数的误差虽都比较大,但对早期的历法,能做到这样却也是不容易的了。

当时参加制历的落下闳曾说,此历过800年后差1天。因此《太初历》不如后来的《四分历》精确。

《太初历》于公元前104年(汉武帝太初元年)开始颁行,以该年十一月甲子朔旦夜半冬至这个时刻作为起算点,这是一个实际测量的结果。在公元前104年的十一月初一夜半时刻正交冬至节气,而这一天正好又逢甲子日,以这个时刻做起点对历法的许多周期数值的计算大为有利。因为一天的起点——夜半;一月的起点——朔旦;一年的起点——十一月;六十干支周的起点——甲子;二十四节气的起点——冬至,5个周期的起点都相会合在一起,就像五个赛跑者此时都正在起跑点上起跑。有了这个起点,对任何一个时刻,它们到了什么地方都可以由各自的周期简单地推算出来。

《太初历》共行188年,到公元84年时为后汉的《四分历》所代替。

祖冲之的《大明历》

汉以后我国的历法有了很大的发展,魏晋南北朝时期出现了不少较好的历法,例如三国时杨伟的《景初历》;南北朝时何承天的《元嘉历》和祖冲之的《大明历》等等,都是很有名的,特别是《大明历》有更多的创造性。《大明历》的制历者祖冲之(公元429~500年)是我国历史上伟大的科学家,在数学、机械制造、乐律等方面都有研究,特别是在数学方面成就很大。但是天文历法也是他研究的主要内容之一,并且同样取得了重大成就,《大明历》就是他这方面的代表。

祖冲之在《大明历》中有不少创造,他取3939为分母,1月的日数是1163213939=2920903939天,化成小数是29.53059日,同现在测得的朔望月长度非常接近,相差不到1秒钟。他认为,传统的19年7闰数值大了些,200年会差1天,于是他提出每391年中置144个闰月的闰周,这个数值的精确程度可以这样来验证:

如果19年7闰,则每年12719个月,1年的长库就是:

2920903939×12719=3651847074841=365.2468(天)

现在测得1回归年长度是365.2422天,每年相差0.0046天。所以祖冲之说200年要差1天。改为391年144闰,每年长度就是:

2920903939×12144391=364.2428(天)跟现测值只差万分之六日,即1年相差52秒,这是相当精确的了。

《大明历》的另一个创新是首次引进了岁差概念。祖冲之首次在编制历法时采用了当时的这个最新成就,使冬至点在恒星间位置每年向西移动一点点。别看移动的数值很小,它的影响却很大。它给我们提供了决定历史年代的科学依据,它给予人们星空在缓慢变化的唯物主义观点。那“天不变,道亦不变”的说教在《大明历》里是没有市场了。

交点月的数值在我国历史上由祖冲之第一次得到。交点月就是月亮两次过黄道和白道交点的时间,黄白交点对于发生日、月食极其重要,只有当朔或望发生在交点附近才可能发生交食,所以月亮每隔多少时间通过交点一次就是很重要的一个概念。祖冲之得出是71777726377=27.21223日,与今测值很接近,《大明历》这项进步对于推算日、月食有重要的意义。

《大明历》是我国历史上重要的历法之一,后代许多历法在年、月长度上不如它精确。它在祖冲之死后10年,即公元510年开始行用近80年。

优秀历法——《大衍历》

公元721年9月乙巳朔,太史局里人来人往。大家虽然忙,但没有什么声音,因为根据《麟德历》的推算,这一天要发生日食,但不知是否如预推的那样准确。大家在做着观测前的准备工作:有的在较准漏刻,有的准备记录簿,有的准备油盆……。预报的时刻终于到来了,在油盆里,耀眼的太阳只显现出一个光亮的圆轮,日食情况可以清楚地看到。实际观测的结果表明,预报同实际有较大的差别。这说明《麟德历》已同实际有了较大的偏差。观测报告送到了皇帝那里,唐玄宗下令:命一行(张遂)制定新历,以代替不准确的旧历。一行辛苦工作了6年,新历制成,他也与世长辞了。他制定的就是《大衍历》。唐玄宗命张说和陈玄景等人把他的遗稿收集整理,写成《大衍历术》和《大衍历议》两部分,今载在新旧唐书的历志里。

《大衍历》是我国历法上优秀的历法之一,内容分?个方面,既继承了前代历法的成绩,又为后代各历所依照。计有:推算朔望的方法;推算二十四节气各日的中午影长及白天黑夜长短;推算太阳运动、月亮运动,七十二侯和六十四卦;推算日月交食,五大行星运动等内容。

大衍历的基本数据是:

通法三千四十——即每天由3040分组成,全历中每一

数据都以此数为分母

策实百一十一万三百四十三——即1年的长度为

11103433030=365.2444,天

揲法八万九千七百七十三——即1朔望月的长度为

897733040=29.53059天

乾实百一十一万三百七十九太——即一周天度数为

1110379343040=365779343040

岁差三十六太——为36343040度,约82年半差1度

转终日二十七余千六百八十五秒七十九——即一近点月为

27168579803040=27.55460天

交终日二十七余六百四十五秒千三百二十二——即交点月为

271685132210000304327.21221天

五大行星的会合周期为:

水星一百一十五日余二千六百七十九秒七十二,即

1152679721003040=115.881天

金星五百八十三日余二千七百一十一秒十二,即

5832679121003040=583.892天

火星七百七十九日余二千八百四十三秒八十六,即

7792843861003040=770.935天

木星三百九十八日余二千六百五十九秒六,即

398265961003040=398.875天

土星三百七十八日余二百七十九秒九十八,即

378279981003040=378.921天

根据这些基本数据,再按照一定的法则就可以安排年的日历,推算交食和五星出没。中国古代历法中这些本数据所用的名称很古怪,这给我们研究古历中的计算法带来了麻烦,但弄清了这些名字的天文含义,其中计方法是不难的。现在有些同志称古代历法著作为“天书”主要是因为弄不清这些古怪名字的意思而难于理解。

《十二气历》和《天历》

古代的100多种历法中,绝大多数是阴阳合历,即太阳的视运动周期为年的单位,以月亮圆缺周期为月的位。由于两者没有整数倍数,所以要采用一定的调整措施这是阴阳合历不可避免的问题。但历史上有两种历法是纯阳历设计,避开了这个问题。其中一个是沈括提出的《十二气历》,一个是太平天国颁行的《天历》。著名的科学家沈括晚年在风景宜人的梦溪园里,记录他自己一生中对各种问题进行研究的心得和收获,写成著名的《梦溪笔谈》。书中提出了我国历史上第1个阳历方案:每年12个月,大月31天,小月30天,大小月相间。二十四节气分成两组,立春、惊蛰、清明、立夏、芒种……称为节气,置于每月的开头;雨水、春分、谷雨、小满、夏至……称为中气,置于月中。这样每年的日期和节气都固定不变,也不用设置闰月,推算很简便。沈括的阳历方案在历史上是无先例的,他明知会遭到攻击,但还是坚信以后总会使用这种设计的。

事情真如沈括所预言的,800年之后的太平天国起义军颁布了《天历》。

《天历》的基本结构,以366为1年,没有闰月。单月31日,双月30日,节气为月首,中气为月中。大月中气从每月的十七日开始,小月从十六日开始。这样除立春、清明、芒种、立秋、寒露、大雪6个节气为16日外,其余都为15日,所以非常简明整齐,几乎人人都能用它的推算方法来推算历谱。《天历》保留了古代的干支纪年、记日、记月的方法,并且使用星期周法。它是以立春为岁首的。《天历》1852年立春与清朝的《时宪历》一致,大约就是以此年立春作为历元。

《天历》将回归年取为366整,大概是为了从整齐完满和推算方便着想的,但这个数值与真值相差较大,4年就差了3天。考虑到这一缺点,太平天国的一位领导人洪仁歼于1859年对天历作了每40年一斡旋的修正。具体地说:每逢40的年份,改用每月28天;每个节气都恒定为14天。经过这次改定以后,天历的回归年长度相当于世界上通用的《儒略历》或我国古代的《四分历》。

农历的闰月

注意一下农历每年所包含的月数,容易发现有的年是12个月,有的年是13个月。这究竟是怎么一回事呢?

我们在前面曾经提到,我国的农历是一种阴阳历,同时把回归年和朔望月的长度做为制历的基本周期。回归年的长度是365.2422日,朔望月的长度是29.5306日,这两者不能通约。如果规定12个朔望月构成1个农历年,这个农历年的长度就是29.5306×12=354.3672日,比回归年的长度少11天左右;如果规定13个朔望月构成一个农历年,那么29.5306×13=383.8978日,又比回归年多了18天多。显而易见,按照这两种规定制定历法都会出现天时与历法不合,时序错乱颠倒的怪现象。比如,按前者规定,某年春节在大雪纷飞的冬天,过了1个农历年,下一个春节就要比前一个春节在季节上提前11天出现,这样过了16个农历年以后,春节就会提前到赤日炎炎的盛夏了。春节可以发生在一年的任何季节里,这样的历法又有什么可用的价值呢?

为了克服这个缺点,同时兼顾到太阳和月亮的运动,我们的祖先在辛勤的天文实践基础上,至迟在春秋时代就创造了“十九年七闰法”,相当完满地把我国的历法建筑在坚实的科学基础之上,远远地走在当时世界各国的最前列。“十九年七闰法”,就是在19个农历年中设12个平年,每1平年为12个朔望月;设7个闰年;每1闰年为13个朔望月。这就是说,19年中总共有12×19 7=235个朔望月,总共的日数为235×29.5306=6939.6910日。另一方面,19个回归年的总日数为365.2422×19=6939.6018日。比较这两个总日数,相差仅为0.0892日。这表明按照“十九年七闰法”可以把太阳和月亮的运动很好地协调起来,就能制定出精度相当高并与天象密切符合的阴阳历。

由此我们可以明白,农历年有时是12个月,有时是13个月,并不是杂乱无章的,而是有着严格的科学规律的。

古历的“三正”之说

古历的“三正”之说历史悠久,其实就是历法的岁首问题。岁首,顾名思义就是一年的开头。现在大家都很明白,阳历的岁首是元旦,农历的岁首是春节,但在历史上却不是这样的。在漫长的观象授时时代,那时还没有历法,是按照物候的变迁和天体的运转判断新的一年的到来,谈不上是从哪一天开始的。后来产生出历法,东周统治者所颁行的历书规定新的1年从子月开始,即现在农历的十一月,包含冬至的那1个月,后代称为周正;春秋时代的郑国、宋国、齐国,它们的历法岁首在丑月,即现在农历的十二月,包含大寒的月分,传说殷代历法的岁首与此相同,故称为殷正;而晋国、秦国以及春秋时代的小国,它们的历法与今天农历一致,以寅月为岁首,传说夏朝的历法岁首与此相同,这就是夏正。正因为这个原因,所以有人把我们现在行用的农历称为夏历。

周正、殷正、夏正的三正之说是表示不同岁首的几种历法。当然历史上还有其他岁首的历法,例如秦和汉初的历法就是以亥月(现在农历的十月)为岁首的。不同的岁首只是一个习惯问题,各个民族也不一致,有的曾将一年的开始设在春分,有的在冬至,有的在泼水节(相当清明左右)。就是目前也还存在各种不同的岁首之说:例如学年的岁首目前统一在秋季的9月份左右,新生人学,旧生升级都在秋季;有的国家的财政年度的岁首放在7月1日,到下年6月30日结束,这是便于财政统计,这也是一种不同岁首的实例。

大月和小月的安排

月大30天,月小29天,可认为是古代历日制度上最巧妙的安排之一。朔望月的长度不是整数天,大约是29天半,客观存在使生活在不同地区的各族人民互相独立地做出了这样巧妙的安排。

朔望月的周期由月亮的圆缺变化明显地体现出来,它周而复始地变化着,圆了又缺,缺了又圆,以它的周期作为一月也有个从什么状态开始的问题。我国有的少数民族曾经以月圆至月圆作为1个月,以月圆作为1个月的开始。至今藏历、傣历还是先确定月望,规定日落时月亮正从东方地平线升起的那1天为十五日,由此再推定初一,这就是以月圆作为月首的遗留;汉族人民古代以月牙儿初见于西方的1天为一月的开始,西周初年称这一天为“肌”。后来懂得了以间接方法推算日月合朔的时刻,就取那个时刻为1月的开始,称为朔。这显然前进了一大步,这个时代大约在西周末年。

日月合朔是看不到的,因为那时月亮以太阳照不到的半边对着我们。我国古代以观测太阳、月亮在恒星间的位置变化来推算日月合朔的时刻,以发生日食来检验这个时刻。当测得某一个合朔时刻之后,就以加上1个朔望月长度的方法推得下一个合朔时刻。逐次相推,可以确定各月初一的日子,用这种方法推算出来的月份大都是大小月相间的。由于一个朔望月比29天半还多一点,每隔17个月安排一个连大月,连续两个月都是30天的大月,这种方法古代称做平朔法。是取朔望月长度的平均值来推算的。

事实上,月亮公转的轨道是椭圆而不是正圆,这就决定了它的运动速度是不等的,用以上方法推出的日月合朔时刻与实际有出入,所以日食有时出现在晦,有时出现在初二。月亮运动的不均匀性,在西汉末年就已经发现,所以刘向和东汉的贾逵、张衡等多次提出用九道术来推算,东汉末的刘洪,第一次在他的《乾象历》中提出推算真朔的方法。他实测月亮在一个近点月内每日实际运行的数值,用一次内插法推算真朔发生的时刻,这就比平朔法推算的结果准确。推算合朔时刻要同时算出太阳月亮的位置,而实际上太阳的运动也是不均匀的,这一事实到南北朝的张子信才发现。隋朝的刘焯在推算日月合朔时第一次考虑到太阳运动的变化。从此各家历法在推算日月合朔时,都同时考虑到日月运动的不均匀性。在推算中刘焯用了二次差的内插法。唐朝的一行用了不等间距的二次差内插法,元朝的郭守敬用到三次差的不等间距内插法,所得结果越来越精确。考虑到日月运行不均匀性而推算合朔时刻的方法称做定朔法。按照定朔法的安排,月份的大小就不老是大小月相间,这就是现在农历上会出现连大月或连小月的原因。