奇想斋

关于 文章 友链 订阅

农历的编算

2020-08-24

公历,也就是现行的格里高利历,大多数人在小学的时候就学过,其规则也很简单。但是农历则不然,每一年春节似乎都在变动,和立春的日子根本不一样,却又总在它附近。而闰月更是让人摸不着头脑,每一个月都有可能称为闰月。

所以,这篇文章我就想写一写,农历是怎样编排出来的。

历法的三个变量

世界上的历法有很多种,大致可以分为阴历、阳历、和阴阳历。这些历法所用的,无非就是三个变量:昼夜周期(天)、地球公转周期(年)、月球盈亏周期(月)。注意,这里说的是月球的盈亏周期而不是公转周期。具体的原因后面再解释。

不同的历法会组合这三个变量。公历是一种阳历,选择了“天”和“年”作为单位,放弃了月球的盈亏周期。所以,公历中的月仅仅具有象征意义。伊斯兰历法是一种阴历,契合了“天”和“月”,而地球的公转则完全不管了。所以,伊斯兰历法中的一些节日,会出现在任何一个季节。中国的农历选择了最难的模式:阴阳历。即,既要考虑月亮的盈亏,又要考虑地球的公转。

如何划定年

假如在地球上竖起一根杆子,记录杆子在白天时影子的长度,那么在中午十二点左右的某个时刻,影子会达到最短,这一刻就是正午。如果在温带,每天记录正午的影子长度,就会发现,一年当中:冬天的某一天,正午影长是最长的;夏天的某一天,正午影长是最小的。

这就是“冬至”和“夏至”的定义。两次冬至或者两次夏至之间,就是一年了。虽然地球上的人类无法从太空中俯视地球的移动,但是用这么一种简单的方法,连续测量很多年,我们就可以知道地球公转一周需要多少天。

中国古代的“圭表”,就是用来测定影子的长度从而划定“年”的。我们算出来的一年的长度,叫做“回归年”。

不过,这一切又没有这么简单,地球的运动还有“岁差”和“章动”。而且,这也不是什么新鲜的事物了,早在公元前二世纪就被古希腊天文学家所察觉。不过,对于本文来说,这些内容有些过于复杂了。

如何划定二十四节气

我们都知道有二十四节气,在上一节只提到了冬至和夏至。接下来就是怎么划定剩下的二十二个了。

早年的方法是非常简单粗暴的。既然冬至已经通过“回归年”计算出来了,那么把两次冬至之间的时间二十四等分成二十四个区间,也就有了二十四个节气。

这种方法被称为“平气法”,其实很粗糙,就是简单的除法运算,但是也够用了。因为地球的轨道是一个很近似圆的椭圆。所以地球的公转速度大致还算比较均匀。

第二种方式更加的精密:定下夏至和冬至之后,按地球在公转轨道上每转过15度角记一个节气。这种需要精确的天文观测和数学计算,需要用到一些近代数学的内容。该方法叫做“定气法”,是在明末才开始采用的,其中有外国的传教士协助,是基于托勒密天文学制定的。根据开普勒定律我们能知道,地球的公转轨道是椭圆,而且运转的速度是不均匀的,所以节气之间间隔的时间不完全一致。

二十四节气中,从冬至或者夏至开始,第一、三、五、七……个节气被称为“中气”,包括了夏至、大暑、处暑、秋分、霜降、小雪、冬至、大寒、雨水、春分、谷雨、小满。你会发现,在公历中,每个月固定会有两个节气,而月末的节气就是“中气”。这个定义在后面涉及闰月的时候会用到。

月亮周期

月亮的盈亏周期是29.5天,但是前面提到过,这并不是月球的公转周期。月球的公转周期是27.3天。月球在转到地球背朝太阳的一侧的时候达到满月,也就是“望”;在转到面朝太阳的一面的时候就看不到月亮了,这就是“朔”。

当月球绕地球转了一周的时候,地球也绕着太阳走了一点距离。所谓,月球要稍微多走一点路,才能达到相对太阳的相同位置。所以,月亮的盈亏周期会比公转周期多一天。

根据农历的定义,“朔”这一天就是每一个月的初一。又因为盈亏的周期是29.5天,所以每一个月的时间在29天到30天不等。

越南和我们同一天过年吗?

越南也遵循传统使用农历。所以,农历新年被称为“Chinese New Year”的时候,越南互联网上还有一些反对的声音,很多英文媒体也因此把农历新年改作“Lunar New Year”。

不过,虽然使用的都是农历,但是越南却不一定和我们同一天过年。北京的时区在东八区,而越南的时区在东七区,有一个小时的时差。所以在特殊的情况下,相对北京时间,月朔会发生在午夜后,而相对河内时间,月朔会发生在午夜前。这样,正月初一的时间就会错开一天。因此,虽然我们和越南采用同样的历法,但是传统新年的日期却不一定相同。

“建子之月”、“建丑之月”、“建寅之月”

地支是以“子丑寅卯”开始的。如果你稍微了解一点生辰八字,就会发现,正月所对应的地支并不是“子”,而是“寅”。而“子”所对应的月份是十一月。月份和地支的这种对应关系也被称为“月建”。据称“建”是指北斗星所指的地方,十一月是“建子之月”,北斗星指向“子”这个位置。

我非常不喜欢这个说法,它过于玄学了。“建子”有更明显更深刻的含义,这也是农历作为阴阳历的重大特点:冬至必定位于“建子之月”。冬至这一天,刚好是一年中白昼最短、黑夜最长的一天。与之对应,十二时辰中的“子时”也是午夜。这种奇妙的遥相呼应,比用莫名奇妙的北斗七星定义要好多了。

春秋战国时,把哪一个月份作为正月是有争议的。有的地方用建寅,有的地方用建丑,有的地方用建寅。据称,这三种正月分别是夏朝、殷朝、周朝的正月,称为“夏正”、“殷正”、“周正”。但是这种说法的真实性不可考证。秦朝又把“建亥”,也就是冬至前的那个月份作为一月。不过,在汉武帝年间,最终确定了“夏正”,也就是把“建寅之月”作为正月,“建子之月”作为十一月。

既然冬至在十一月,那么冬至之后的第一个月朔,就是腊月初一,冬至后的第二个月朔,就是正月初一,也就是春节。

所以,如果有人问起春节究竟是怎么确定的,你可以略带神秘,用占星家的口吻说:“冬至后的第二个新月”。不过,这种说法又并不总是准确,因为还有“闰月”。

置闰法

闰月是农历中最复杂的部分。一个回归年大致是365.2422天,而一个朔望月是29.5天。如果一年记12个月,那么就只有29.5 × 12 = 354天。差不多每隔两三年就会和回归年偏差一个月。因此,当偏差发生时,就要增加额外一个月来补偿。这就是闰月。

农历的置闰法差不多分为三个阶段:

第一个阶段是“十九年七闰”。在先秦使用的就是这种历法。根据古人对朔望月周期和回归年的观察,每隔19年差不多就有7个闰月。但是这种方法是非常粗糙的。

汉代以后,通行的置闰方法是“无中气置闰”。前面提到了,二十四节气中有十二个间隔分布的“中气”。如果使用二十四等分回归年的“平气法”,每两个“中气”之间间隔30.43天。随着时间的推移,会出现有的月份没有中气,这时就置一个闰月。这个方法很好的兼顾了朔望月和回归年,计算也比较方便,因此一直施行到明末。

第三个阶段,在清初开始推行的《时宪历》中,农历进行了一次更大的升级,变成了今天的样子。

天文表述的农历

去读《时宪历》有点麻烦。所幸紫金山天文台在2017年参与制定了一部农历的国家标准《农历的编算和颁行(GB/T 33661-2017)》,对于农历如何置闰做了精确的描述。

这里面除了第一条“北京时间”是古代所没有的以外,其它都是和《时宪历》一脉相承的。

在农历中,年、月、日完全由天文观测确定,只要观测准确,就不会存在任何误差。在现代仪器的帮助下,二十四节气、朔望月、回归年的观测都可以精确到秒乃至毫秒级别。反而是现行的公历,因为没有根据天文观测调整的机制,会和回归年逐渐发生误差,几千年就会偏差一日。

2033年问题

虽然《时宪历》已经颁行了三百年,但是民间往往还因循守旧,使用古老的“无中气置闰法”。在大多数年份,这两者其实一样,但是因为种种细微的偏差,在2033年,“无中气置闰法”和现代的农历置闰法会发生冲突。本来2033年在“无中气置闰法”中是闰七月,但是因为从2032年农历十一月开始到2033年农历十一月之间只有12个农历月,所以闰月应该放在这一年的第二个无中气的月份:11月。而不采用现代置闰法的一些民间的“万年历”可能会有错误,导致中秋节偏差了一个月。


Powered by Pandoc ©️ 2017-2021 奈卜拉
欢迎致信 nebula_moe@outlook.com