历法漫谈
喜欢古代史的,大概总要涉及到古代历法。研究汉以后历史的,好在有各种的工具书,只要查一下就可得到结果。而研究先秦史的,由于年代不清楚,大概对历法需要有更多的理解。这就发展出了“年代学”这门学问。

其实,历法并不神秘。只是需要很多的“数学”,特别是要学会加减乘除。另外,还有很多的“学问”,也就是一大堆名词。如果能突破这两点,历法就是囊中之物了。

历法漫谈1:日子

 

一日的定义就是过一个白天、再过一个夜晚。这就涉及如何定义一天的开始。远古时人们习惯于“日出而作,日没而息”的生活,自然以即将日出时(即“平旦”)来作为新的一天的开始。在不知道时间的时代,“鸡鸣三号”也可以告诉人们新的一天来了。然而,夏日天长,冬日天短,无论是“平旦”还是“鸡鸣”来定义新的一天的开始,就会使得每天的日长都不一样。

 

据说黄帝发明了漏壶,定义了时刻,有了十二时辰,就可以用“夜半子时”来定义一日的开始。也可以用寅时(35时)来模仿“鸡鸣”的定义。而几千年以后夜半(0时)就成了全世界通用的标准。但在“儒略日”的定义里,是以中午(12时)来定义一日的开始,这大概是为了方便天文学家的工作。

 

过日子就是一天天数着过。如何数日子就是历法的内容了,这叫“纪日法”。最短的是用七日一星期来数,四个星期为28天(与28宿有关?)。其次是按月来数,一个月有28天、29天、30天、31天等等。在古代中国,还有“干支纪日”,用六十甲子来数日子,六十天一个周期。最长的则是“儒略日”,它没有循环周期,从儒略历的公元前471311日格林尼治平午(即该地民用时12时)为“0”日的开始,至次日格林尼治平午为“1”日的开始,由此顺数而下,延续不断地记下来。例如:200511日格林尼治平午,儒略日为2453372

 

 

历法漫谈2:月子

 

“人有悲欢离合,月有阴晴圆缺,此事古难全。”古人无事时看看月亮,从黄昏挂在西边天上的弯弯的新月,到半个月亮的上弦月,到圆圆的满月,再到下弦月,到清晨东边天上的一弯残月,还有看不见月亮的时候。这个过程是周而复始的,一个周期是29天或30天。于是古人就有了“月”的概念。象“坐月子”、“月信”等都与这个“月”有关。

 

在历法中,关于月的定义,就涉及到每月的开始、每个月有几天、如何数月份等问题。

 

远古时,人们是以第一次见到新月为一个月的开始,称为“”。今天的伊斯兰历法仍是以新月为每月的开始。但是,随着古人认识的提高,就提出了“朔”的概念,即日月相合时为“朔”,而日月相对则为“望”。在中国古代,是以朔日为每月的开始。这样,每个月就有29天或30天。

 

在朔日是看不到月亮的,每个月会有一两天看不到月亮。那么古人如何确定那一天是朔日?一是比较朔日前后能看见的残月和新月形状来推算。另外则是在一个地方平均几年发生一次的日食提供了检验朔日的方法,日食必须发生在朔日。而平均每年都有的月食则必须发生在望日。因此,古人应该是对日月食有了一定的认识之后,才有朔的概念。

 

至于数月份的问题,则与“年”的定义有关。

 

历法漫谈3:年岁

 

俗话说“年岁不饶人”,也就是说一年一年过得很快。古人很早就发现了四季的变化。夏天酷热、冬天寒冷、春日温煦、秋日高爽,渔猎时代的人们是深有体会的。“离离原上草,一岁一枯荣,野火烧不尽,春风吹又生。”春生、夏长、秋收、冬藏,是农耕时代的体会。这种周期性的四季变化就使古人产生了“年岁”的概念。

 

在历法中,需要定义一年有多少天,一年有几个月,每年开始于何时,如何数年头(即“纪年法”)等等。

 

先说如何数年头的问题。现在的公历是用公元纪年的,号称以耶稣诞生之年为公元1年,今年为公元2005年。我国在数千年里,是用帝王年号来纪年的,如元封七年,万历十五年等。

还有一种干支纪年法,用六十甲子来数年头,六十年一个周期,比如今年为乙酉年。

 

每年的开始必然是某月1日,而哪个月就是历法中的“年首”问题,也就是“建正”。中国古代有“建寅”、“建子”、“建丑”等不同的定义。

 

在中国古代历法里,一岁为365天或366天,一年有1213个月。也就是“年”和“岁”是有不同含义的。一岁的准确天数(如365.2422)在古代被称之为“岁实”。但后来人们就将“年”和“岁”混用了。

 

历法漫谈4:历法的基本要素

 

历法就是规定年、月、日这三个基本要素,只要将年月日作出定义以及判断或推算的方法,就是一套完整的历法。其中,年和月的配合最为重要。

 

目前常见的历法有三类,即阳历、阴历、阴阳历。

 

阳历是以一年有365天或366天来定义的,“平年”为365天,“闰年”为366天,而哪年是闰年则是由“闰法”来规定的。然后再定义一年有几个月,每月有多少天。比如“十月历”,一年十个月,每月36天,这样10个月有360天,剩下的五六天用来“过新年”。

 

阴历是按月亮的圆缺来定义的,这样一个月有29天或30天。再定义一年为12个月,这样一年有350多天,不到360天。象伊斯兰的历法就是如此。

 

阴阳历则是年按阳历之年定义、月按阴历之月定义。比如,我国古代大部分历法就规定:一岁为365天或366天,一年有1213个月,每月有29天(小月)或30天(大月)。平年里一年为12个月,闰年里一年有13个月,其中一个月为“闰月”。

 

历法漫谈5:公历

 

公历是国际上通用的历法,在研究古代年代时,一般均使用公历来作为参照系。

 

公历中定义的每月中的天数为:135781012月为31日,46911月为30日,平年时2月为28天,闰年时2月为29天。这样平年有365日,闰年有366日。这些规定是人为的,主要是西方古代帝王们干的好事。纪日法就称XX日。

 

公历中的纪年法称公元XX年,如今年为公元2005年。上溯到起点,是公元1年。再往前,是公元前1年,公元前2年等等。其中没有公元0年的说法,这也是上世纪末争论“新千年从哪年开始”的原因。

 

有时为了方便,将“公元”二字省掉。有时为了计算,就将公元前的年代用负号表示。但有个约定,将公元前1年记为0年,公元前2年记为-1年,公元前2070年记为-2069年。可以看出,将负号的年代转换为公元前年代,数字上有1年的差别。

 

1582104日以前,公历是按儒略历的闰法,即“四年一闰”,只要年数能被4整除就是闰年(2月有29日),否则为平年(2月只有28日)。如公元1004年的“1004”能被4整除,为闰年,该年有229日。而公元1006年的“1006”不能被4整除,不是闰年,只有228日,没有229日。但对公元前的年代则一定要转为负号年代,才能按上述规则计算。比如,将公元前1年转为0年,“0”能被4整除,是闰年。如公元前1045年转为-1044年,是闰年。而公元前1044年就不是闰年。

 

儒略历是公元前46年罗马统治者儒略·凯撒大帝制定的,按儒略历的闰法,一年有3651/4日。但公历将儒略历的闰法一直往前延伸到公元前任何年代。

 

15821015日以后,公历是按格里历的闰法,除了类似儒略历的“四年一闰”(只要年数能被4整除就是闰年,否则为平年)以外,还规定每逢整百的年数,则需要能被400整除方为闰年。例如,公元1900年的“1900”虽能被4整除,但不能被400整除,因此不是闰年。而2000年能被400整除,才是闰年。这样,格里历的闰法是400年中有97个闰年,相当于一年有36597/400日(365.2425日)。

 

注意,按公历定义,1582104日之后就是15821015日。也就是没有该年的10514日。这是罗马教皇格里高利十三世在1582年干的事情。

 

历法漫谈6:干支历

 

在古代中国,也有十分简单的历法,这就是“干支历”。传说伏羲造《甲历》,可能与干支历有些渊源。当然,学者们更多提的是“干支纪日”和“干支纪年”。

 

干支是由十天干和十二地支组成的。十天干为:甲0、乙1、丙2、丁345、庚6、辛7、壬8、癸9,其中的数字是用于后边作计算用用的。十二地支为:子(鼠)0丑(牛)1寅(虎)2卯(兔)3(龙)4巳(蛇)5午(马)6未(羊)7申(猴)8酉(鸡)9、戌(狗)10亥(猪)11,其中括号内是“十二属相”或“十二兽”,传说黄帝为让人们记住十二地支,就用十二兽来帮助记忆,而数字也是为了计算而给的编号。

 

由十天干和十二地支进行配对,就可排出60个不同的组合,称为“六十甲子”,其顺序为:

, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

0, 甲子, 乙丑, 丙寅, 丁卯, 戊辰, 已巳, 庚午, 辛未, 壬申, 癸酉

1, 甲戌, 乙亥, 丙子, 丁丑, 戊寅, 已卯, 庚辰, 辛巳, 壬午, 癸未

2, 甲申, 乙酉, 丙戌, 丁亥, 戊子, 己丑, 庚寅, 辛卯, 壬辰, 癸巳

3, 甲午, 乙未, 丙申, 丁酉, 戊戌, 已亥, 庚子, 辛丑, 壬寅, 癸卯

4, 甲辰, 乙巳, 丙午, 丁未, 戊申, 已酉, 庚戌, 辛亥, 壬子, 癸丑

5, 甲寅, 乙卯, 丙辰, 丁巳, 戊午, 已未, 庚申, 辛酉, 壬戌, 癸亥

为了计算方便,常使用数字编号,取甲子为0,乙丑为1…癸酉为9,甲戍为10…壬戍58,癸亥59

 

在干支历中,最主要的是干支纪年和干支纪日。是从某甲子年或某甲子日开始,按六十甲子往下数,过六十年或六十日后就又从甲子开始。

 

而每年十二个月和每日十二时辰,它们的地支均是固定的。而它们的天干则分别与年干和日干有关,具体的对应方法容后再谈。比如,今年春节的凌晨子时,公历2005290时,相应的干支历记为:乙酉年戊寅月甲子日甲子时。干支历其实就是民间的“八字”或“四柱”。

 

历法漫谈7:公历转换为干支历

 

先看年干支的计算。在y年,如2005年则是y=2005;而公元前的年代要转为负号年代,如公元前2070年则为y=-2069。计算a值:a=y-4;再计算gz值:gz=a-[a/60]*60,其中[ ]表明是取整运算,如[8.75]=8。如果gz值为负,则gz=gz+60,使其为正值。这个gz值就是前面六十甲子的编号。例如,对2005年,y=2005a=2001a/60=33.35[a/60]=33gz=21,而21就是乙酉,说明2005年是乙酉年。对公元前2070年,y= -2069a= -2073a/60= -34.55[a/60]= -34gz= -33gz= -33+60=27,则前2070年为辛卯年。

 

也可以从a值分别计算年天干或年地支。天干值为:g=a-[a/10]*10,若g是负数则g=g+10。地支值为:z=a-[a/12]*12,若z是负数则z=z+12。例如,公元前2070年,a= -2073g = -3g=7z= -9z=3g值为7对应天干的“辛”,z值为3对应地支的“卯”,因此前2070年为辛卯年。

 

再看日干支的计算,主要是先将公历日期转换为儒略日,再由儒略日来计算日干支。因为儒略日是以正午开始新的一天,这里我们不妨约定某日的儒略日是对应于该日正午的。而计算儒略日的方法有很多种,这里只选一种适于编程的方法(括号内的是举例):

1)对于ymd日。(如20052912时,则y = 2005m = 2d=9

2)如果是1月和2月(m=1m=2)则:m=m+12y=y-1。(因m=2,则m=14y=2004

3)计算a值:a=[30.6001*(m+1)] 。(a=[30.6001*(14+1)]=[459.0015]=459

4)计算b值:在1582104日以前(含),b=0;在15821015日以后(含),b=2-[y/100]+[y/400]。(因在1582年之后,b=2-[2004/100]+[2004/400]=2-20+5= -13

5)计算c值:如果y<0c=[365.25*y-0.75]-694025;如果y³0c=[365.25*y]-694025。(因y>0c=[365.25*2004]-694025=731961-694025=37936

6)计算约化儒略日mjd值(以190010.5日起算的天数):mjd=a+b+c+d。(mjd=459-13+37936+9=38391

7)计算儒略日jd值: jd=mjd+2415020。(jd=38391+2415020=2453411

从举例来看,20052912时的儒略日为2453411,或略去12时而称200529日的儒略日为2453411。在计算儒略日时,对于公元前的年代,同样要注意先将其转为负号年代。

 

而将儒略日转换为日干支就非常简单了。对于儒略日jd值,计算ad值:ad=jd-11;再计算gz值:gz=ad-[ad/60]*60,这就是干支编号。例如儒略日为2453411,则ad=2453400gz=0,对应干支为甲子,表明该日为甲子日。也可以从ad值分别计算日天干或日地支。天干值为:g=ad-[ad/10]*10,地支值为:z=ad-[ad/12]*12

 

顺便提一句,用儒略日来计算星期几也很容易。对于儒略日jd值,计算ax值,ax=jd+1;再计算xq值:xq=ax-[ax/7]*7xq值为0时是星期日,其余的值是几就是星期几。如200529日的儒略日为2453411ax=2453412xq=3,则该日为星期三。

 

历法漫谈8:节气

 

在远古时期,人们体会着一年四季的变化,也发现不同的季节有不同的天象。最简单的是,冬季太阳很低,而天短;夏季太阳很高,而天长;春秋两季则居中,日夜长度相等。

 

单从午间太阳影子的长度,就可判断四季,这就有了成语“立竿见影”。古人在地上栽个竿子,每天在午时(即太阳影子落在南北线上)观测一下影子的长度,做个记号。很容易就发现在冬季的某日,影子最长,这天被称为“冬至”或“日南至”;而在夏季的某日,影子最短,这天被称为“夏至”或“日北至”。而在春秋两季各有一日,日出或日落时太阳影子落在东西线上,这就是“春分”和“秋分”。

 

顺便说一下,古人如何确定南北线(子午线)和东西线(卯酉线)。只要将竿子立直了(松手掉个石头就知道竿子直不直),在白天认真盯着竿子的影子,随着太阳的运动,影子先逐渐变短,然后再逐渐变长。由此确定出影子最短的一点,这就是“北点”,其时对应于“正午”。而竿子插地点为“南点”,两点的连线就是南北线。而日出时的影子为“西点”,日落时影子为“东点”,两点的连线为东西线。

 

春分、夏至、秋分和冬至分别是四季的中点,这应该是人们最早知道的四个节气。西方人大概到今天也只知道这四个。而我们的古人还要寻找四季的起点,即立春、立夏、立秋和立冬这“四立”,这就需要天上的星空来帮助了。

 

有了这八个节气,四季应该是可以定下来了。然而,一年有十二个月,如何把八个节气排到12个月就成了问题。于是古人又把节气扩大到二十四节气,这就是我们今天所熟知的。后来,又将其扩展为七十二候。这也是“气候”这个词的来历。

 

历法漫谈9:农历

 

我国现行农历的定义是:定朔、定气、建寅、无中气置闰。

 

“定朔”是指“朔”的时刻由太阳的黄经和月亮的黄经相等来定义。朔日就是当月的初一。

 

“定气”是根据太阳的黄经来定义二十四节气的时刻:春分为太阳黄经0度,每隔15度为一个节气。例如,夏至为太阳黄经90度,秋分为180度,冬至为270度;立春为315度,立夏为45度,立秋为135度,立冬为225度,等等。

 

二十四节气实际上分为“节”和“气”,“气”又叫“中气”。农历的月份与中气有固定的关系。含有冬至的为子月,有大寒的为丑月,雨水为寅月,春分为卯月,谷雨为辰月,小满为巳月,夏至为午月,大暑为未月,处暑为申月,秋分为酉月,霜降为戌月,小雪为亥月。

 

农历“建寅”是指以寅月为正月,卯月为二月,依此类推,子月为十一月,丑月为十二月。而“无中气置闰”是指若农历某月里不含任何中气,则为闰月,名称为前一个月加“闰”字。例如某年八月(含秋分的酉月)后的一个月里不含中气“霜降”,则为闰月,称“闰八月”;再后的一个月里有中气“霜降”,方为“九月”。

 

依据农历的规则,只要知道各年里朔和中气的时刻,就可排出当年的公历和农历的对照表来。然而,由于日月运动的不规则性,特别是月亮的运动更为复杂。因此,朔与节气的时刻均需要由天文学计算来给出。在国际上,以前对日月运动是使用理论公式计算;从1984年起,各国使用美国喷气推进实验室和海军天文台计算的DE200/LE200星历表(19602025AD)来计算,我国历法的权威单位中科院紫金山天文台就以此编制年历。以后,美国喷气推进实验室又计算出了DE404/406星历表(3000BC3000AD),时间跨度为6000年。(这些表见http://ssd.jpl.nasa.gov/eph_info.html)最近,瑞士人又将其扩展到5400BC5400AD,称为“瑞士星历表”(见http://www.astro.com/swisseph/),时间跨度为10800年,可以真正算出“万年历”了。

 

当然,从这些星历表来计算出朔和节气的时刻是需要一些专业知识和编程能力的。而最简单的是利用现成的朔和节气的表格,比如张培瑜的《三千五百年历日天象》等工具书。我自己就用依据“瑞士星历表”而计算出来的表。

 

历法漫谈10:干支纪月

 

前面讲过如何将公历的年和日转换为年干支和日干支,现在说说如何确定月干支和时干支。

 

先说时干支。古人将一日分为十二时辰,23-1时为子时,1-3时为丑时,3-5时为寅时11-13时为午时21-23时为亥时。因此时辰的地支是固定的,其天干则与日的天干有关。因为干支有60个,一日有12时辰,这样六十甲子就可排出5日的时辰来。时干支的起点就是“甲日子时”,其时为甲子时;甲日丑时为乙丑时,依此类推。到第二天“乙日子时”为丙子时,等等。五天将六十甲子排完,就又开始了新的一轮。到第六天子时,是“己日子时”,又是甲子时。为了方便,可以使用如下的对照表,第一行为日干,第一列为时支。

, 甲己, 乙庚, 丙辛, 丁壬, 戊癸 

, 甲子, 丙子, 戊子, 庚子, 壬子 

, 乙丑, 丁丑, 己丑, 辛丑, 癸丑 

, 丙寅, 戊寅, 庚寅, 壬寅, 甲寅 

, 丁卯, 己卯, 辛卯, 癸卯, 乙卯 

, 戊辰, 庚辰, 壬辰, 甲辰, 丙辰 

, 己巳, 辛巳, 癸巳, 乙巳, 丁巳 

, 庚午, 壬午, 甲午, 丙午, 戊午 

, 辛未, 癸未, 乙未, 丁未, 己未 

, 壬申, 甲申, 丙申, 戊申, 庚申 

, 癸酉, 乙酉, 丁酉, 己酉, 辛酉 

, 甲戌, 丙戌, 戊戌, 庚戌, 壬戌 

, 乙亥, 丁亥, 己亥, 辛亥, 癸亥 

 

而月干支的确定与时干支是相似的方法,因为月的地支也是固定的,故其天干就与年干相关。五年排一轮月干支,见如下的对照表,第一行为年干,第一列为月支。

年干, 甲己, 乙庚, 丙辛, 丁壬, 戊癸 

正月, 丙寅, 戊寅, 庚寅, 壬寅, 甲寅 

二月, 丁卯, 己卯, 辛卯, 癸卯, 乙卯 

三月, 戊辰, 庚辰, 壬辰, 甲辰, 丙辰 

四月, 己巳, 辛巳, 癸巳, 乙巳, 丁巳 

五月, 庚午, 壬午, 甲午, 丙午, 戊午 

六月, 辛未, 癸未, 乙未, 丁未, 己未 

七月, 壬申, 甲申, 丙申, 戊申, 庚申 

八月, 癸酉, 乙酉, 丁酉, 己酉, 辛酉 

九月, 甲戌, 丙戌, 戊戌, 庚戌, 壬戌 

十月, 乙亥, 丁亥, 己亥, 辛亥, 癸亥 

冬月, 丙子, 戊子, 庚子, 壬子, 甲子 

腊月, 丁丑, 己丑, 辛丑, 癸丑, 乙丑

 

其实,古代人提出“干支历”时,应该用的是“建子”,即以子月为一年的开始。因为从上表可以看出,在甲子年时,寅月的干支为丙寅,往前推两个月为子月,其月干支为甲子。若按“建寅”,即以寅月为一年的开始,则两个月前的子月是属于前一年的,即癸亥年。但若是“建子”,则寅月前的子月仍属甲子年,这就是甲子年甲子月。如果还是甲子日,则子时所对应的为“甲子年甲子月甲子日甲子时”。这应该是“干支历”的起点。

 

需要注意的是,在干支纪月时,是不考虑闰月的。遇上闰月怎么办,没人说过。也许可以用前月的干支再加上“闰”字。例如,某年八月是辛酉月,之后有闰八月,可称为“闰辛酉月”,再后的九月继续为壬戍月。

 

还有个办法,就是使用纯阳历的方法,定义寅月开始于立春,卯月开始于惊蛰,等等。这就是北宋沈括提议的,清末太平天国实行过的,而最近章潜五教授鼓吹“春节定于立春”的历法。然而,这种历法虽然避开了闰月的问题,却也把月亮的“阴晴圆缺”给丢掉了。

 

历法漫谈11:古代历法

 

现代农历是与我国古代历法一脉相承的。作为历法的定义,主要有朔和节气的计算、建正和置闰法等。

 

在朔和节气方面,中古以来直到现代使用“定朔”和“定气”,其方法已在前面说过。而在上古时期,则用的是“平朔”和“平气”。所谓“平朔”,是指知道朔望月的天数,即一个阴历月的天数,如29.5306日,从某一个朔时开始,每隔29.5306日为一个朔,从而排出一系列的朔日来。所谓“平气”,是指知道一个阳历年有多少天,即“岁实”,如365.2422日,将等分为24份,每份为365.2422÷2415.218425日,从某个冬至开始,每15.218425日为一个节气,从而排出24节气的日期来。当然,利用“平朔”或“平气”的方法,就需要知道第一个朔是在什么时刻,或第一个冬至是在什么时刻,这就必须通过实际的天文观测来确定了。这也与所谓的历法“上元”有关系。

 

“建正”是指每年开始于那个月。古代有“建子”、“建丑”和“建寅”等不同的方法,分别是以子月、丑月和寅月为一年之始。

 

“置闰法”是指如何设置闰月,比如“无中气置闰”。在上古时期,还有“年末置闰”,即在闰年时,将闰月放置在年末,称为“十三月”。而闰年的确定,有“三年一闰”、“五年二闰”、“十九年七闰”等方法。

 

因此,要了解某个古代历法的情况,只要能够知道上述的有关信息,就可以排出相关的历谱来,并可以给出古代历谱与公历的对应关系。

 

历法漫谈12:四分历

 

在上古时期,一直流传着“古六历”的说法,即《黄帝历》、《颛顼历》、《夏历》、《殷历》、《周历》和《鲁历》。这些历法都属于“四分历”的系统。

 

四分历的基本数据为:回归年为3651/4日(365.25日,这与西方的儒略历的参数是一样的),设置闰年的方法为“197闰”。根据这两个数据,就可推出朔望月的长度为29499/940日(29.53085日,=365.25×19÷(19×127))。再依据前述的“平朔”和“平气”的方法,就可推算出历谱来。

 

在“四分历”系统中,19年为一“章”,共235个月(=19×127),各章中所对应的年月所含日数都是相同的,但不是整数,这是因为有1/4(即“四分”)的问题。如此,“四章”76年(=4×19)为一,则不同“蔀”中相应的年月日就全同了。但对应的日干支并不相同,为此则需要“二十蔀”1520年,叫做“一纪”,则不同纪中相应的日干支就一样了。但相应的年干支还不相同,就需要“三纪”4560年,叫“一元”,如此则相应的年月日干支和日数就全同了。这就是一元复始的来历。“一元”有60“蔀”,因此常称某“蔀”的第一年的干支为“蔀首”,如“甲子蔀首”等。而一元有3纪,分别称为“天纪”、“地纪”、“人纪”。

 

然而,“四分历”的参数是有误差的。如回归年长度(365.25日)与现代值365.24220相差1114秒,则每过128年节气将差一日。而朔望月长度(29.53085日)与现代值29.53059相差22.5秒,则每过310年朔或望将差一日。如果真是过了“一元”4560年,则阳历的日子(如节气)将相差35.6日,阴历的日子(如朔望)相差14.7日,人们就看到节气差一个多月,而朔成了望、望成了朔。其实古人早就发现了这个问题,《春秋保乾图》曰:三百年斗历改宪。说明古人差不多三百年就需要改一次历法。

 

因此,各个古代的四分历,都是在发现历法失天后,重新设定历法的起点以合天。古六历之间的差别实际是根据观测来调整历法的起点,这样就出现了不同的上元。据《开元占经》卷一百四载,古六历上元年距唐玄宗开元二年甲寅(714AD)的纪年数分别为:《黄帝历》上元辛卯以来2760863——其第606元天纪甲子蔀首距开元二年为2063年,即公元前1350年;《颛顼历》上元乙卯以来2761019——其第606元天纪己巳蔀首距开元二年为2219年,即公元前1506年;《夏历》上元乙丑以来2760589——其第606元天纪甲子蔀首距开元二年为1789年,即公元前1076年;《殷历》上元甲寅以来2761080——其第606元天纪甲子蔀首距开元二年为2280年,即公元前1567年;《周历》上元丁巳以来2761137——其第606元天纪甲子蔀首距开元二年为2337年,即公元前1624年;《鲁历》上元庚子以来2761334——其第606元天纪甲子蔀首距开元二年为2534年,即公元前1821年,亦即公元前301年为地纪甲子蔀首。

 

只要知道历法的起点,以及“建正”和“置闰”等问题,就可以排历谱了。更详细的请看七秩龄童等在“先秦网”和“国学网”上的系列帖子,或参看刘洪涛的《古代历法计算法》(南开大学出版社,2003)。

 

历法漫谈13十九年七闰

 

如果是使用“无中气置闰法”,只要排一排节气和朔日就能够确定闰月。在使用“定朔”和“定气”的情况下(如农历),根本就不用关心“多少年一闰”的问题。但在上古时期,人们将“十九年七闰”作为非常重要的历法规则,例如“古六历”就是如此。但到中古以后,就逐渐放弃了这个规则。

 

对于上古历法,还有的历法是采用“年末置闰”,将闰月作为“十三月”。而这就需要确定哪一年为闰年。如果是在“十九年七闰”的规则下,一般将闰月安排在第35811141619年,其中相隔的年数为3233323年。当然还可以使用其他的安排方法。

 

一般认为“十九年七闰”的规则是到春秋时才确立的。然而,《史记》等史书记载:“黄帝得宝鼎宛朐,问于鬼臾区。区对曰:‘帝得宝鼎神策,是岁己酉朔旦冬至,得天之纪,终而复始。’于是黄帝迎日推策,后率二十岁得朔旦冬至,凡二十推,三百八十年,黄帝仙登于天。”这段话是说,黄帝得宝鼎之年,冬至是在朔日,他们经过推算知道:过19年后又出现冬至在朔日的情况,推算20次,共380年(=19×20)。而这就说明黄帝时已经知道“十九年七闰”的规律了,否则就不会有相隔19年的两次“朔旦冬至”。

 

历法漫谈14“推步”与“观象”

 

“历法”就是推算“历”的方法,当然也包括历法参数和起点等。在古代,历法又被称为“推步授时”,即利用一定的方法来推算年月日。官方依据历法推算出年历,并向百姓进行颁布,让人们知道“今夕是何年”。

 

应该说,每一部历法的推算方法是简单的,但历法的好坏就与其参数和起点很有关系了。而历法参数和起点则需要天文观测来确定。而且在古代中国,非常讲究历法与天象的合拍,特别是日月星“三光”要和历法的年月日是一致的,这就是所谓的“合天”。如果历法与天象不一致,就是“失天”,比如初一看到了月亮等等,就需要改历。而每逢改朝换代之时,新的帝王认为自己是“奉天承运”,更是要改历。这就是古代中国有近百部历法的原因。

 

所以,创立新历法需要进行天文观测,检验历法的好坏也需要靠天文观测。古代称天文观测为“观象”。这样,“推步”与“观象”就有了紧密的联系。

 

因为中国古代历法具有“合天”的特点,这就为我们提供了一种确定年代的办法。因为现代天文学可以给出从公元前5400年到公元5400年这10800年中任何时刻的天象来,这样,即使没有足够的历法资料,利用少量的历日信息并与当时的天象进行比较可以确定其年代。

 

比如,在“夏商周断代工程”中占重要地位的“金文历谱”,就是利用“王年、月份、月相和日干支”四要素来推定年代。又例如,假如干支历开始于“甲子年甲子月甲子日”,并且是朔日,则有公元4231219日、公元前4977118日、以及公元前7137118日和公元前8217217日等日期。

 

历法漫谈15“观象授时”

 

关于历法的问题,大致也就是这些了,剩下的是一些细节。然而,历法不是凭空出现的,也有其起源问题,或是“源头”。这就是历法出现之前的“观象授时”阶段。古代人极为重视日月星“三光”,就是因为用日月星可以“授时”,也就是用以确定年月日。

 

正如开头讲的那样,根据月亮的“阴晴圆缺”可以却定“月”和月中的“日”。即使有了历法之后,月相也仍然用于纪日法的辅助参考。比如现在已知西周有60多个“王年、月份、月相和日干支”四要素俱全的金文记载,例如《九年卫鼎》“惟九年正月既死霸庚辰”。

 

金文中常见纪录月相的名词有:初吉、胐、既生霸、既旁生霸、既望、既死霸、旁死霸。这些名词究竟对应哪几天还是正在研究的问题。大概有三类观点,1)定点说:董作宾先生创为定点月相说,以为一个月只有月初(朔,或死霸、初吉)及月中(望或既生霸)两个定点,这个定点只有两天的游移,各称旁死霸及旁生霸;2)四分说:王国维先生创为四分月相说,以为初吉、既生霸、既望、既死霸各指一个月由月初到月尾的四分之一;3)二系说:由“夏商周断代工程”所创。由于对月相名词的解释不同,便出现了很多版本的西周金文历谱。

 

古人最关心的是如何确定年和季节的问题,这对进入农业社会的古人更为重要,因为“人误地一时、地误人一年”。确定季节的方法可以有很多种,大致有四类:用物候、用太阳、用星辰、用月亮加星辰。

 

大概古人最早是用物候来判断季节的,例如观测草木的荣枯。这方面发展的顶点就是后来的每隔5天多的“七十二候”,表示一年中物候和气候的一般变化情况。七十二候可分为两类:一类是生物物候,其中有动物的,如鸿雁来、寒蝉鸣、蚯蚓出等;也有植物的,如桃始华、萍始生、禾乃登等。另一类是非生物候,如水始冰、雷乃发声、土润溽暑等。内容非常广泛。但是其中也有观察错误、不合乎科学事实的情况,如鹰为鸠、雀入大水为蛤等。七十二候的起源甚早,《逸周书》中记载的已告完全确立。对农事活动曾起过一定作用。但是,由于候的时间单位较小而气候的年际及地区差别很大,故难以广泛应用。

 

用太阳判断季节的方法,就是前面提到的“立竿测影”,可以确定冬至、夏至和春分、秋分等节气,可以测定回归年(“岁实”)的长度,等等。

 

历法漫谈16:“参历”与“火历”

 

用“立竿测影”的办法可以测定四季,但需要观测者的经验和时间,因而在远古时往往是“官方”的任务。还有个简单的方法,就是看太阳出没的方位,春分秋分时太阳出没于正东和正西方,夏至时太阳出没于东北和西北方,冬至时则是东南和西南方。考古发现的“八角星纹”可能就来源于太阳在四季中出没的方位,并可能是八卦的起源。

 

黄昏时仰望天空,不同的季节会看到不一样的星空,因此利用所看到的星空就可以确定季节。比如在黄昏时看到的星空,有的星星正在西落(“昏没”或“偕日没”)、有的星星恰在正南方(“昏中”)、还有的星星刚刚东升(“昏升”);同样,在黎明时看到的星空,有“晨没”的星、有“晨中”的星、也有“晨升”或“偕日升”的星。

 

这种使用星空来确定季节的方法是世界性的。在大洋州、美洲和非洲的土著中,常常使用昴宿、毕宿、参宿或天狼星来确定新的一年的开始。例如,古埃及就以天狼星的偕日升作为新年。在我国远古时期,应该是万年以前的渔猎时代,就是用参宿(“三星”)来确定季节的,也可强名之为“参历”。昴、毕、参宿均属四象中的“西方白虎”,而天狼星也与之相距很近。在世界范围使用“白虎”星宿来确定新年或季节,表明这种文化的源头是同一的,应该是在末次冰期时传播到全世界的。

 

在参历之后,我国远古的人们又有了“火历”(火历的概念是庞朴在80年代提出的),即以心宿的“大火”星来确定季节,远古时设专门的官员“火正”来做此事。《诗经》讲:“七月流火、九月授衣”,也就是在七月的黄昏时看到大心星在西南方落下,就应该准备冬衣了,因为两个月后就需要穿厚衣服了。心宿属于四象中的“东方苍龙”,常见的“二龙戏珠”的“珠”就是大火星,少数民族的“火把节”也与大火星的“南中”有关。

 

据《左传·昭公》记载:“昔高辛氏有二子,伯曰阏伯,季曰实沈,居于旷林,不相能也。日寻干戈,以相征讨。后帝不臧,迁阏伯于商丘,主辰。商人是因,故辰为商星。迁实沈于大夏,主参。唐人是因,以服事夏商。”反映了商人用“大火”、唐人用“三星”的历史。

 

因为有岁差的影响,在不同年代(如差上百年到上千年)的同一季节所看到的“昏中”星是不一样的,这就是所谓的“岁自为岁、天自为天”。比如,今天的“大火南中”是在公历7月(农历6月),而在约1万年前 “大火南中”是在2月(农历正月)。因此,利用岁差效应也可粗略地确定年代。象前面《左传》的记载被称为“参商不相见”(见杜甫、高适、侯方域等诗),即三星与大火星,此出彼落,从不相见。根据计算,参商不相见”的年代是在公元前7200年以前。

 

历法漫谈17:二十八宿

 

太阳在星空中的运行轨迹叫黄道,每年太阳沿黄道转一圈。二十四节气就是将黄道均分为二十四份。因此,只要知道太阳在黄道上的位置,即“日躔点”,就能确定当时是处在什么季节。然而由于阳光太强,太阳附近的星空是无法直接看到的,因而只能靠间接的方法来判定太阳位置。前面提到的观测“偕日生”、“偕日没”、“昏中”、“晨中”等星就是一种方法。

 

再者就是使用月亮。在满月时(“望日”),月亮与太阳正好是相对的(“相冲”),只要看到满月在什么星宿附近,太阳就位于再过180度的星宿那边,就可以确定季节了。然而,一年只有十二三个望日,显然不够用,就希望可以用每天的月亮来测定。比如,上弦月和下弦月时太阳和月亮相差90度,亦可根据月亮所在星宿来判定太阳所在的星宿。

 

月亮在星空中的运行轨迹叫“白道”,运行一周为27.32日。于是古人就在星空中设定了二十八宿,使得每天“月躔一宿”。宿数取28而不是27,应该是考虑宿数是4的倍数,使得月亮与太阳成180度或90度时,太阳和月亮都处在宿中。

 

二十八宿为:东方苍龙七宿,角亢氐房心尾箕;北方玄武七宿,斗牛女虚危室壁;西方白虎七宿,奎娄胃昴毕觜参;南方朱雀七宿,井鬼柳星张翼轸。由于“西方白虎”的昴毕参3宿和“东方苍龙”的角亢氐房心尾6宿均是很早就用于“观象授时”了,因而进入二十八宿是很自然的。而其他的各宿是在创立二十八宿体系时加入的,以保证28宿均匀地分布在黄道和赤道附近,并且是两两相对。根据这些特点,可以确定二十八宿体系的建立年代为约公元前5800年左右。

 

但是,由于岁差效应的影响,二十八宿就逐渐变得不那么均匀了,有的宿间距离拉的很开,而另外有的宿却靠得很近。这样,仅靠目测来“授时”就有问题了,就需要依靠象“浑天仪”这样的仪器了,据说是颛顼发明了浑天仪。

 

历法漫谈18斗纲建月”

 

《公羊传·昭公十七年》曰:“大辰者何?大火也。大火为大辰,伐为大辰,北辰亦为大辰”。这就是说,古人不但观测参宿(伐)和心宿(大火)来确定季节,还使用北斗(北辰)来定季节。

 

北斗七星绕北极旋转就象一个钟表的表针一样,每天转一圈,不过是逆时针转动,而且转一圈的时间要比24小时短上近4分钟。这样一年365天,北斗要转上366圈。古人就把北极这块“钟表”标上了十二时辰,即斗柄北指(下指)为子、南指(上指)为午、东指为卯、西指为酉等等。

 

在不同的季节、不同的时间,北斗七星在北方天空的位置也不同,所以根据北斗七星的所在位置可以判定季节。《鹖冠子》说:斗柄东指,天下皆春;斗柄南指,天下皆夏;斗柄西指,天下皆秋;斗柄北指,天下皆冬。古人发现,在冬天黄昏时,北斗七星的斗柄正指向北方,故称该月为“子月”,如果历法是以子月为一年的开始就叫“建子”。而春天黄昏时,斗柄正指向东方,称该月为“卯月”。

 

而且,古人也发现北斗是和二十八宿一起旋转的,只要看到北斗转的位置就可推知二十八宿的位置。如此,古人就将整个星空分成十二块(以和十二月相应),就像从北极下刀切成的12块西瓜瓣一样,分别取名为星纪、玄枵、娵訾、降娄、大梁、实沈、鹑首、鹑火、鹑尾、寿星、大火、析木,这种划分方法相传是由黄帝确立的,叫做“十二次”。比如在东周时期,子月时太阳在星纪(斗牛),寅月时太阳在娵訾(室壁),巳月时在实沈(觜参),戍月时在大火(房心)等。当然,由于岁差的影响,不同时代十二次与节气月份是有着不同的对应关系。

 

“天上的群星参北斗”。由于北斗牵连着十二次、二十八宿以及节气月份等,因此,《史记·天官书》说:斗为帝车,运于中央,临制四方。分阴阳,建四时,均五行,移节度,定诸纪,皆系于斗。古代帝王就将观测北斗作为极为重要的政治任务,故尧曰:咨尔舜,天之历数在尔躬,允执其中,四海困穷。书曰:在璇玑玉衡,以齐七政”。这里的“璇玑玉衡”就是专门用于观测北斗旋转方位的仪器(当然,大名鼎鼎的夏鼐是反对这种说法的),仪器中心就是瞄准北天极,古称“天心”。

 

历法漫谈19:“岁星”与“太岁”

 

古人把木星叫做“岁星”,因为木星绕太阳一周的时间为11.86年,差不多每年在星空中走一“次”。比如某年木星在“鹑火”,称为“岁在鹑火”,则下一年则是“岁在鹑尾”。这和十二次与节气月份的顺序是一样的。因为太阳是顺着二十八宿运动,这样节气和月份也相当于顺着二十八宿的顺序,木星的运动也是顺着二十八宿运动。而如果十二次是按月份来划分,则也是顺着二十八宿的。但是,有人认为还有“十二辰”,和十二次的顺序是逆着的,这恐怕是战国时甘德对十二次理解错误而提出的“十二辰”。

 

但由于木星的周期并不正好是12年,而且有逆行的运动。于是人们就就假设一个均匀运动的天体,叫“太岁”,也叫“太阴”,每年走一“次”,12年在星空中走一圈。这样木星和太岁均是顺着十二次运动,只是木星运动不均匀,而太岁的运动是均匀的。其实,太岁就是按年的地支顺序,只不过取了一些特殊的名字。

 

《尔雅》称:“太岁在甲曰阏逢,在乙曰旃蒙,在丙曰柔兆,在丁曰强圉,在戊曰著雍,在己曰屠维,在庚曰上章,在辛曰重光,在壬曰玄黓,在癸曰昭阳。──岁阳。

太岁在寅曰摄提格,在卯曰单阏,在辰曰执徐,在巳曰大荒落,在午曰敦牂,在未曰协洽,在申曰涒滩,在酉曰作噩,在戌曰阉茂,在亥曰大渊献,在子曰困敦,在丑曰赤奋若。

载,岁也。夏曰岁,商曰祀,周曰年,唐虞曰载。──岁名。

月在甲曰毕,在乙曰橘,在丙曰修,在丁曰圉,在戊曰厉,在己曰则,在庚曰窒,在辛曰塞,在壬曰终,在癸曰极。──月阳。

正月为陬,二月为如,三月为寎,四月为余,五月为皋,六月为且,七月为相,八月为壮,九月为玄,十月为阳,十一月为辜,十二月为涂。──月名。”

 

由此可知,太岁不但有年地支的特殊名称,而且有年天干的特殊名称。同时,月的干支也有自己的特殊称呼。如《离骚》说:摄提贞于孟陬兮,惟庚寅吾以降。,“摄提”是寅年,“孟陬”是孟春正月,“庚寅”是日干支,说明屈原生于寅年寅月庚寅日。如此看来,古人使用这些特殊称呼,大概是为了与日干支进行区分。但在东汉以后就不再使用年月干支的特殊说法,而与日的干支一样使用“六十甲子”了。

 

历法漫谈20:天文年代学

 

前面讲了历法及其相联系的有关天象,这种密切联系就使得人们有可能利用历史上的有关天象来确定年代。基于天文现象和天体运动的规律,通过数学计算可以相当准确地确定出天象发生的日期。如果一个历史事件与某些天象相联系,就有可能通过这样的回推天象方法来确认该历史事件发生的日期,这种方法就被称为天文年代学。

 

例如,古希腊哲学家泰勒斯预言了一次日食的发生,从而制止了米底王国和吕底亚王国的交战。通过回推天象的方法可以确认,这次日食发生在公元前585528日。

 

而据苏格兰历史记载,当时,挪威国王哈康四世率领大批船队渡海准备去惩罚苏格兰国王。他们在中途的奥克尼群岛(Orkney Islands停留时,天上的太阳变成了细亮环。19世纪初的英国物理学家布儒斯特D. Brewster据此确认,这是发生在公元126385日的日环食。

 

天文年代学的学科名称始于二十世纪二十年代,但实际上很早就有人做类似的工作了。例如,我国西汉末的刘歆和唐朝的一行。在天文年代学中经常使用的天象有日月食、朔望、行星、彗星和恒星等。但由于天象的周期性,要用天象来确定年代,往往需要结合其他文献和考古学的年代资料。也就是说,用其他方法来确定大致的年代范围,再用天象来定具体的年份。

 

历法漫谈21:天狼星周期

 

古埃及把尼罗河开始泛滥和天狼星偕日同升的那一天作为新年开始,这样的事情是每年都发生一次,是一个回归年(太阳年)的长度。但古埃及的历法是一年365天,差不多是每4年相差一日,720年差半年,1460年差一年,这样1460年就叫“天狼星周期”。文献上讲,在公元139142年间发生过天狼星偕日升的现象,人们认为这时其历法起点与偕日升为同一天。如此上推两个天狼星周期,则历法起点分别为公元前1313年和公元前2769年。

 

如果有天狼星与日偕升的记录,而且注明了是几月几日。因为天狼星偕日升的日期是可以计算出来的,并与其记录的月日比较,确定出相差几天。例如提早了335天,按4年差1天计算,表明与天狼星周期的起点(如公元前2769年)相差了1340年(=335×4),即为公元前1429年。目前已知古埃及有两条天狼星与日偕升的记录,史料记载的一条被确定为公元前18721830等三个年份,埃伯斯纸草记录的另一条被确定为公元前1525年等三个年份。不同年份是因为假定不同的观测地点,故看到天狼星偕日升的日期是不相同的,日期差1天就相当于4年。

 

孙小淳曾如此评价说:“用天狼星偕日出定年代的方法是基于一个非常根本的假设之上,就是古埃及的民用太阳历从未有过调整。……古埃及民用历明明分一年为三季,为尼罗河泛滥期、冬季和夏季,如果不作置闰的调整,那历法上的三季很少是和实际季节符合的,……严格说来,只有天狼星周期1460年起始的那一年季节才真正地名副其实,这对注重农业的古埃及人来说同样也是很奇怪的。然而,埃及的年代学正是建立在这种不变的民用太阳历的假设之上。自从1904年德国学者梅耶尔提出这种假设之后,埃及年代学的大厦就逐步建立起来。到目前为止,还没有强有力的证据推翻这种假设,于是假设竟成为公理一般;而如果没有这个假设,就无从谈埃及的天文年代学。”

 

历法漫谈22:金星泥版

 

对于古巴比伦的年代学,公元2世纪的古希腊天文学家托勒密在其著作中给出从公元前747年到公元前323年之间的30个王的年表。对前747年以前的年代,人们根据古巴比伦记载的一次日食,确定其为公元前763615日,如此建立了公元前1000年以后的各王年。

 

在出土的文物中,有一批带有楔形文字的泥版,写作年代为公元前7世纪(相对于春秋时期),其中一块记载着8年的金星运行情况,文字中提到了一个古王。在数十年里,许多天文学家计算了这8年金星记录所对应的年代,有公元前1920170216461582年等。著名的汉穆拉比是在此前146年,由此形成了巴比伦年代学的三个系统:高年代系统取汉穆拉比元年为前1848年、中年代系统为前1792年、低年代系统为1728年。三个年代系统各有自己的证据,但多数人取中年代系统。

 

从汉穆拉比上溯,根据古王年表可以推到公元前2700年。再往前,则是每王在位140年到1200年不等,甚至有8王共治24200年的说法。

 

历法漫谈23:夏商周断代

 

在司马迁给出的年表中,有年代的最早到公元前841年。对于这之前的历史年代,二十世纪末的“夏商周断代工程”应该说是向前推进了一大步。虽然该工程给出的年代还不能算是定论,但与古巴比伦年代学等比起来,所得到的成果还是很不错的。

 

在这个工程里,有一些天文年代学的例子。例如,刘次沅等观测“天再旦”的现象,还有陈久金的“金文历谱”、江晓原的“武王伐纣”、张培瑜的“甲骨文月食”以及李勇的“帝辛周祭”等。这些基本上是利用天象回推和干支回推的方法来确定年代,绝大多数均有多个年代的选择,这就需要结合其他的材料来限定年代范围。而象“仲康日食”、夏禹的“五星连珠”就只能给出几个候选年代了。

 

然而,在用天文历法研究中国古代年代时,绝大多数情况下都会用到一个假设,即纪日干支的连续性。这是假定在数千年的时间里,用六十甲子来标记日子的方法从未中断,也没有调整过。对于春秋以来,纪日干支确实是连续不断的,但在春秋以前则只能是假定了。

 

纵观有关天文历法的工作,大致可以分为几类:一是复原古历法,按古人的推算来确定当时的年月日或有关天象;二是用现代的天象回推来确定古历法的准确度或是确定年代;三是用干支纪日来推定古代历法的设定或确定年代。这些方法很早就已经存在了,但今天人们还在使用,只是面对的问题有所不同。

 

余论

 

断断续续写了这些内容,也就该结尾了。感谢各位的鼓励和指正,期望这点东西能够对大家了解先秦史有所助益。