今天是大年廿九,也是甲辰龙年的最后一天。俗称除夕的这一天有时是大年三十,有时是大年廿九,而未来五年都没有大年三十。究竟是什么力量左右了大年三十是否出现呢?

翻看农历不难发现,一个农历月可以有30天,也可能是29天。所以当腊月有30天,那么就有大年三十,如果腊月只有29天,那么就只有大年廿九。那么如何确定一个农历月是30天还是29天呢?按照现行农历的编排规则,农历月的第一天必然是朔日,朔日即日月地心视黄经相等时刻所在的农历日。


日食发生时日月黄经相等,所以日食必然出现在农历初一︱Yuri Beletsky

我们通过现代天文学手段获得每一次日月地心视黄经相等时刻,得到朔日所在,也就知道了每个农历月第一天即初一的位置,相邻两个农历初一之间就是一个农历月,如果相邻农历初一之间相隔29天,这个农历月就是小月;如果相隔30天,这个月就是大月。造成未来五年没有大年三十的直接原因就是这五年的腊月初一和正月初一之间都只隔了29天,使得年三十无法现身。

不难发现,有没有年三十,实际上跟如何确定初一有紧密关系。而确定初一就是编排现行农历的关键一步。关于现行农历,最权威的参考是2017年颁布的推荐性国家标准GB/T 33661-2017《农历的编算与颁行》。这份标准在线即可预览[1],其中最关键的是以下几行文字:


GB/T 33661-2017《农历的编算与颁行》

下面我尝试带大家理解这两百余字背后的内涵与逻辑。

首先是4.1

  • 4.1 以北京时间为标准时间

作为一部要在中华人民共和国境内行用的历法,基于北京时间制定是非常合理合法的事情。北京时间0时~24时为一个农历日。

然后是4.2和4.3

  • 4.2 朔日为农历月的第一个农历日

  • 4.3 包含节气冬至在内的农历月为农历十一月

如果你一直不理解农历为什么是阴阳历,这两条规则就是最好的解释。

首先一个农历月的第一天是由朔日决定的,所谓朔日是指包含朔在内的农历日。那么何为「朔」呢?朔指的是月球和太阳的地心视黄经相等的时刻,也指这一时刻的月相。这一条规则显然对应了农历之中与月球相关(阴)的部分。

4.3规定包含冬至的农历月为农历十一月,冬至在天文学上指太阳地心视黄经为270°的时刻。虽然农历一年是以农历正月为起始月(见4.5),但定位正月的前提是确定农历十一月。可以说冬至时刻才是农历真正的起算点,以历法的术语表示,冬至是农历的历元,而正月初一是农历的年首。规则4.3无疑体现了农历之中「阳」的部分。

4.4是关于农历置闰的

  • 4.4 若从某个农历十一月开始到下一个农历十一月(不含)之间有13个农历月,则需要置闰。置闰规则为:取其中最先出现的一个不包含中气的农历月为农历闰月

在以4.2和4.3确定农历十一月初一的位置以后,接下来就是确定从一个农历十一月到下一个农历十一月(即下一个冬至所在的农历月)的月份编排。

方法也不难,首先找到朔日,相邻两个朔日之间就是一个农历月。这时候不要急着给农历十一月之外的月份命名,首先要数一数两个农历十一月之间有多少个月份,如果有11个农历月(不包含两个农历十一月),就正常按时间先后顺序命名为十二月、正月......到十月;如果两个农历十一月之间出现了12个农历月,就意味着有一个农历月需要特殊处理。2025乙巳蛇年之所以是闰年,因为从2024年冬至日(2024年12月21日)到2025年冬至日(2025年12月21日)之间有13个农历初一,从一个初一到下一个初一(不含)之间为一个农历月,即有12个完整农历月。按照规则,这12个农历月中会有一个闰月。

如何找到这个需要特殊处理的月份呢?这时候再次涉及到农历的阳历部分:我们要找到除冬至以外剩下11个中气[2]的时刻,看看11个中气分别在哪个农历月中,首先出现的没有中气的月份就是我们要找的特殊月份,称为闰月。闰月之外的月份正常命名,闰月则以其前一个正常月份的名称前加「闰」的方式命名。以即将到来的2025乙巳蛇年为例,这一年的大暑(7月22日)和处暑(8月23日)之间存在一个完整的农历月,这个农历月是该冬至周期(2024年12月21日~2025年12月20日)的第一个无中气农历月,属于闰月。该闰月前一个农历月是六月,所以这是一个闰六月。


2025乙巳蛇年闰六月

置闰这一条农历规则可能是不少人对农历的最大疑问。只要农历还是一种阴阳历,坚持调和阴阳的目的,其置闰方式就不可能像公历一样在某些年份添加闰日来解决,而是必须添加一个完整历月以匹配月球的运动。闰月不是农历的bug,而是阴阳历的feature。

现代农历编算规则的最后一条

  • 4.5 农历十一月之后第2个(不计闰月)农历月为农历年的起始月

可能有些同学不解为什么这条规则要放在最后,特别是为什么要放在农历置闰规则的后面,直接说农历正月是农历十一月之后第2个月不对吗?还真不行,因为闰月完全有可能会在农历十一月和农历正月之间出现(如2033癸丑牛年闰十一月),这时候正月就会是十一月之后的第三个农历月。


2033癸丑牛年闰十一月

综上,现代农历编排的逻辑链为:

1.根据月球位置确定朔日,即每个农历月的初一。从一个朔日到下一个朔日(不含)为一个农历月,此时可知每个农历月的大小(大月30日,小月29日)

2.根据太阳位置确定冬至时刻,冬至所在农历月为农历十一月

3.结合1、2给出连续两个农历十一月之间的农历月数量,判断是否需要置闰

4.如需置闰,根据太阳位置确定中气时刻,首先出现的一个不包含中气的农历月为农历闰月

5.农历十一月之后第2个(不计闰月)农历月为农历年的起始月

结合1~5确定正月初一及全年日期编排


农历编排简明流程

可以看到这一套流程还有两个大前提,就是需要精确的太阳和月球位置,这就是为什么说国家标准中第5部分同样关键。

  • 5.1 太阳和月球的位置按国际地球自转和参考系服务规范规定的模型计算

  • 5.2 朔和节气的北京时间计算精度应达到1s;不计及编算时尚未正式发布的闰秒

现代农历的编排规则其实与明末以来的官方历法大体一致,现代农历置闰规则的前身「无中气置闰」更是自西汉太初历起便有之。现代农历之所以现代,正是因为接轨了现代天文学,太阳和月球位置以及相关的朔与二十四节气时刻都是基于现代天文学模型的计算结果。

如果你坚持读到了这里,相信你已经对如何确定现代农历有了初步认识~最后祝各位看官在即将到来的农历蛇年心想事成,巳巳顺利~

参考&拓展

[1]传送门:https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=E107EA4DE9725EDF819F33C60A44B296

[2]中气指从冬至开始的二十四节气中逢奇序数的节气,即:冬至、大寒、雨水、春分、谷雨、小满、夏至、大暑、处暑、秋分、霜降、小雪。

往期热门


ad1 webp
ad2 webp
ad1 webp
ad2 webp