定朔与平朔相对应,二者都是我国古代历法中的重要因素。我国古代的历法主要采用的是阴历或阴阳历,但无论是阴历还是阴阳历,都必然有朔望月作为计算的常数。朔望月是指月球绕地球公转相对于太阳的平均周期,即月亮的圆缺变化的周期。我国古代先民将月亮在星空中随着自东向西的位置变化而产生的从缺到圆的各种形状的变化称为“月相”,即月亮相位的变化。人们将月相变化的周期称为“朔望月”,也称“太阴月”,古称“朔策”。人们将完全看不到月亮的一天称为“朔日”,即阴历每月的初一,这一天的日、月几乎同时出没,月球和太阳的黄经相等;又将月亮最圆的一天称为“望日”,即阴历每月的十五(大月为十六),这一天的月球和太阳的黄经相差 180 度。
朔望月作为基本的时间单位,它是连接两次朔或两次望之间的时间。古代先民们发现,月亮的圆缺变化是有一定规律的,并且经过观测得出,从一次月圆到下一次月圆所经历的时间大约是三十天。因此,古代历法中规定的朔望月的平均日数为 29 又 499/940日,以大月为 30 日,小月为 29 日,大小月轮流交替。这种推算方法所得的朔日称“平朔”。
但在实际情况中,月行速度在一个近点月内时时变动,日行速度在一回归年内也有迟疾,因此,日月合朔就未必在平朔这一天内。虽然通过大小月的方式进行了协调,但其与天象并不相符,对于日月食的发生时刻的推算也不准确。据历史记载,日食的发生有在上月的晦日的,也有在本月的初二的。
南朝刘宋的天文学家何承天在编订《元嘉历》 时,就曾主张废除平朔,采用定朔。公元 443 年,何承天上表称:“月有迟疾;合朔、月食不在朔望,亦非历意也。故元嘉皆以盈缩定其小余,以正朔望之日。”
采用定朔法的好处就在于,将日月黄经相等的时刻定为“朔”,将日月黄经相差 180 度的时刻定为“望”,这样日食就一定发生在朔日,月食也一定发生在望日,朔望与天象不符的矛盾就可以解决。但是,当时的人们已经习惯了平朔法,思想守旧的有势者更是无法接受定朔法导致的四个大月相连和三个小月相连的情况,于是坚决反对使用定朔法,何承天采用定朔法的想法最终没有实现。后来的刘孝孙、刘焯等人都在历法中建议使用定朔,尤其是刘焯,他在制定《皇极历》时不仅采用了定朔法,还考虑了祖冲之的岁差法,独创了一种等间距二次内插法,使历法的科学程度大大提高,但最终因为张胄玄等人的反对而被弃用。
唐代以前,历朝历代的历法中都采用平朔法,导致人们只知道月有一大一小,而不顾历法的精确性和科学性。虽然何承天、刘焯等人已经发现了问题并给出了定朔法这一正确解决办法,但由于时人的墨守成规,导致新法始终未能施行。唐武德二年(619),在沿用了数千年的平朔法后,定朔法终于迎来了它的机遇。道士傅仁均因“善历算、推步之术”被唐高祖召令修订旧历,为了改正平朔法导致的历法缺点,决定采用定朔法,制定了《戊寅历》,这是我国历法史上的一次大改革。
《戊寅历》是中国古代第一部由朝廷颁布施行的采用定朔法的历法,但才施行不久,就被《麟德历》所取代。原因是贞观十九年九月以后,按照《戊寅历》的排法,出现了有四个月连续是大月的现象,这在当时的历学家们看来是极反常的异象,最后受到多方攻击的《戊寅历》不得不被停用。麟德二年(665),唐高宗颁行《麟德历》,平朔法再次取代了定朔法。
为了解决出现连续四个大月或三个小月的问题,《麟德历》采用了一种独创的“进朔法”。李淳风在编《麟德历》时,参考了刘焯 的《皇极历》,再用“定朔”,但并不是严格意义上的定朔法,而是根据朔日余数的具体情况,将朔日上退一日或下推一日,使得相应的大月变成小月或小月变成大月。这是因为,如果按照平朔法,虽然可以出现规则的一大一小月,却与天象不符,日月合朔总是比实际上早一天或晚一天。而李淳风采用了“进朔迁就”的方法就可以解决这一问题。这种变通的方法使得指责定朔法的人也失去了口实,只好接受,这一办法一直沿用到了元代。
公元 330 年,我国古代天文学家虞喜 独立发现了岁差。《宋史·律历志》载:“虞喜云,尧时冬至日短星昴,今二千七百余年,乃东壁中,则知每岁渐差之所至。”我国古代十分注重冬至点的测定,上古时候,人们就通过测定昏旦中星,推算夜半时刻中星的位置,来确定太阳在星空中的位置。虞喜通过测定,发现自己所处时代的冬至点中星的位置,与唐尧时代所测得的中星的位置不一样,由此推算出冬至点每一年的位置都有差异,岁差之名也由此而来。
由于地球在运行过程中,受到其他天体的引力作用,赤道与黄道的交点不断地改变,而这一交点每年移动的值就是“岁差”。根据现代的实测,冬至点在黄道上大约每年西移 50.24 秒,也就是 71 年 8 个月差一度,按照中国的古度就是 70.64 年西移一度。
由于这一移动的角度非常微小,以至于一直未能引起古人的注意。其实,早在公元前 7 年,西汉刘歆在编订《三统历》时,就曾对冬至点的位置产生过怀疑,但未意识到冬至点的改变,更没有发现岁差的存在。东汉的贾逵根据实测,发现战国时代记载的冬至点在牵牛初度的位置并不准确,当“在斗二十度四分度之一”。但是,贾逵也没有意识到这是冬至点在西移,也没有发现岁差的存在。
直到晋代的虞喜才发现了岁差的存在,并测定自唐尧至其所处的时代的两千七百多年间,冬至黄昏中星已经过了 53 度的变化,从而得出的结论是冬至点每 50 年西移 1 度。这一点在《大衍历·历议》中有记载:“其七《日度议》曰:古历,日有常度,天周为岁终,故系星度于节气。其说似是而非,故久而益差。虞喜觉之,使天为天,岁为岁,乃立差以追其变,使五十年退一度。”
虽然虞喜已经发现了岁差,但并未将其应用于历法制定之中,真正将岁差这一概念引入历法的是南北朝时期的祖冲之。祖冲之继承和发展了虞喜的测定方法,依据大量的历史资料研究推算,使岁差的测定方法发展成熟。他将自己“参以中星,课以蚀望,冬至之日,在斗十一”,与姜岌测定的冬至点在斗十七的结果相比较,认为“通而计之,未盈百载,所差二度”。由此得出岁差值为 45 年 11 个月差一度。祖冲之测算出来的岁差值与实际上的岁差值相差较大。隋代刘焯的《皇极历》中,则将岁差改为 75 年差一度,比虞喜和祖冲之测算的岁差值都更加精确,也更接近于实测值。这一岁差值也被唐宋在历法制定中所沿用。到了元代的《授时历》时,岁差值已经精确到了 66 年8 个月差一度。
岁差的存在直接导致的后果就是冬至点的变动。每一年的冬至点都没有回到原来的位置上,而是岁岁西移,这也导致了二十四节气位置的变动。不过,在中国古代,人们制定历法时需要符合天象,对日食、月食的准确性尤其重视。因此,中国的历法每过一段时间就要修订,而在岁差被发现后,自祖冲之的《大明历》始,后世的治历者在每一次修订历法时都会考虑岁差的问题。岁差值越来越精确,也使得二十四节气位置推算更精确,相应的交节时间点也越来越精确。
“节”和“气”在古代是分开的,分为“节气”和“中气”,直到现代才将二者统称为“节气”。中国古代将一年称为一岁,一岁又分为十二个月,每月有两个节气,一个在前半月的月初,俗称“节气”,一个在后半月的月中,俗称“中气”。在农历中,平年每月也是两个节气,一个节气,一个中气。但是因为在二十四节气中,节气是跟着太阳年走的,和朔望月并没有什么关系,因而就会出现二十四节气的位置不固定,每个月的节气都不一样,若遇到农历闰年的闰月就只有一个节气,没有中气。
除了二十四节气在天文学上的位置变动外,其名称的顺序也曾发生变动。众所周知,二十四节气的二十四个名称并不是一开始就确定的,它们的排序也不是一开始就和现代的顺序一样,而是在其形成的过程中经过变化才最终确定的。前文中已经提到,在《淮南子》的记载中,除了将二十四节气中的“惊蛰”称为“雷惊蛰”、“清明”称为“清明风至”、“白露”称为“白露降”外,其他节气的名称与现代是一样的。但“惊蛰”的古称原是“启蛰”,因为西汉第六位皇帝刘启继位后,人们为了避讳,才将“启蛰”改为了“惊蛰”。并且二十四节气中的“启蛰”一开始是排在“雨水”前面的,汉代人们将“启蛰”改为“惊蛰”,《月令》以及汉代的历法都将“惊蛰”排在了“雨水”之前,后来人们又把“雨水”调换到了“惊蛰”的前面,形成了现代的二十四节气的顺序。据传是因为“惊蛰”是“惊雷动而蛰虫出”的意思,但古人发现正月里的天气多为下雪天,打雷的天气实在太罕见了,而二月则比较常见下雨天,多春雷,所以才将“惊蛰”移到了二月里。