三千年农历计算

您所在的位置:网站首页 将月相和对应的农历日期连接起来 三千年农历计算

三千年农历计算

2024-07-16 23:05| 来源: 网络整理| 查看: 265

在这农历戊戌年的年尾,正好趁着放假,花了点时间使用高精度的现代天文学模型推算了从公元前104年至公元3000年这三千余年的农历,以及与中国农历相近的韩越日农历,并以此为基础做了个万年历。

从公元前104年(汉太初元年)汉武帝的太初历施行至今,两千余年来中国农历逐渐从基于规则排算的历法演变为了完全基于天文的历法。[1]619年(唐武德二年)的戊寅元历弃平朔而采用定朔,此后1645年(清顺治二年)颁行的时宪历改平气为定气,则成为了中国农历历法最后一次重大的改革。所谓平朔、平气,就是假定日、月运动是均匀的,将所有的「朔」(日月合朔)与「气」(节气)人为均匀地排布,而定朔、定气则是从天文角度规定日月视黄经相等的时刻为「朔」,太阳视黄经为15°整数倍的时刻为「气」。与平朔、平气法相比,定朔、定气法的困难之处就在于如何高精度地计算日月位置。现今通行的农历(紫金历)与清朝的时宪历一脉相承,区别也仅在于紫金历吸收了现代天文学成果,更为精确罢了。

这里我使用了美国宇航局喷气推进实验室(JPL)的DE431历表计算太阳与月球的位置,再修正岁差、章动等效应后得到太阳与月球地心视黄径的精确估计,从而预测了公元3000年之前的所有农历日期。与网上推算农历常用的VSOP87/ELP2000历表相比,JPL的DE系列历表更为精确。当然,这些历表得到的时间都是力学时(DT),而对于数百数千年后天体位置的预测而言,力学时与我们平常使用的世界时(UT)之间的差距Δt的不确定性将成为影响农历日期估计的主导因素,用什么历表反倒是次要的了。

基本编算规则

根据2017年颁布的国家标准GB/T 33661-2017《农历的编算和颁行》,现行农历的编算规则为:

以北京时间为标准时间。 历月的第一个农历日。包含节气冬至在内的农历月为农历十一月。如果从某个农历十一月开始到下一个农历十一月(不含)之间有13个农历月,则取其中最先出现的一个不包含中气的农历月为农历闰月。农历十一月之后第2个(不计闰月)农历月为农历年的起始月。

简单说,只要确定了前一年的冬至,再算出冬至前的首个朔日(即前一年的农历十一月初一),一个农历年基本也就定了下来。当然如果遇到一年中包含13个月(朔望月)的情形,还需要根据「无中气置闰」的原则设定闰月。所以,农历的排算主要在于如何计算节气(包含中气)与月相。

计算过程

下面简单列出了基于DE431历表的农历推算过程。[2]计算主要参考了1841年–2200年公曆和農曆日期對照 [3]以及《Explanatory Supplement to the Astronomical Almanac》一书。这里仅列出了简要的过程,具体可参见上述参考资料。

节气的计算对于平气法,直接根据寿星天文历拟合的系数计算给定节气的UT时刻。定气法的计算过程如下:在任一质心力学时(TDB)时刻(可忽略其与地球时TT间的误差),根据DE431历表(或同系列的其他DE历表)可计算太阳在该时刻的天球坐标系(GCRS)位置。修正光行时与光行差效应后,得到太阳的地心视位置。计算使用了Python程序包jplephem。将GCRS坐标系转换为瞬时黄道坐标系,并根据IAU2006/IAU2000A岁差章动模型[4],计算太阳的地心视黄经。可使用牛顿法(或其他求根算法)得到给定节气的TDB(TT)时刻,使得在该时刻太阳视黄经等于该节气所对应的太阳视黄经。根据经验公式或历史闰秒列表,将节气的TDB时刻转换为UTC时刻(1972年前为UT1时刻)。采用上述算法,计算前一年与本年的冬至(定气法中为太阳视黄经270°)日期。分别计算两个冬至之前的合朔日期。合朔计算类似节气计算,定朔法中除了太阳的视黄经外还需计算月球的视黄经,同样可使用牛顿法得到太阳与月球视黄经相等的合朔时刻。对平朔法,则与平气法一样直接使用参数计算。这两个合朔日期对应前一年与本年的农历冬月初一,从而确定了一「岁」。[5] 计算两年的冬月初一之间所有合朔时刻,可以得到期间的农历月(朔望月)数目。当有12个农历月时不存在闰月,冬月初一之后的第二个朔日为农历大年初一。当两个冬月初一之间(一「岁」)有13个农历月时,其中必定包含一个闰月。此时需计算这13个农历月内的所有中气(太阳视黄经为30°整数倍)日期,首个不含中气的月为闰月(即「无中气置闰」),其计数与上个农历月相同(例:三月后的闰月为闰三月)。如出现闰冬月或闰腊月[6],大年初一为冬月初一之后的第三个朔日。

另外需要补充说明的是,计算中为方便起见我统一使用了北京标准时间(UTC+8),即东经120°的平太阳时。但历史上实际用的是观测当地的真太阳时,而民国初年的《新法天文夏历》则使用了北京当地时,即东经116°23'的平太阳时。1929年之后的紫金历才正式开始使用北京时间。

韩越日传统历法

作为东亚文化圈的成员,韩、越、日的历法也深受中国农历的影响。三国目前的农历(旧历)都源于中国的时宪历,区别在于韩国、日本使用东九区时间,而越南使用东七区时间。日本旧历的推算规则与中国农历略有细微的不同,我已另文叙述。韩国、越南农历的推算规则则与中国完全一致,前述方法也同样适用于韩历与越南历,只需将时间作相应转换即可。

也正由于观测位置不同,两国农历与中国农历对比偶尔会出现偏差。如2012年(壬辰年)韩国为闰三月,而中国则为闰四月。根据程序计算的结果,该年的中气小满为5月20日23:15(UTC+8),而相邻的合朔为5月21日7:47(UTC+8)。由于东八区小满比合朔早一天,5月21日开始的农历月没有中气,因而置闰四月。但在东九区,小满与合朔同为5月21日,使得之前一个月缺中气,因而置闰三月。

类似地,1985年(乙丑年)越南历与中国农历出现过新年相差一个月的情况。前一年的冬至为12月22日0:23(UTC+8),合朔则出现在12月22日19:47(UTC+8)。对中国农历而言,冬至与朔日为同一天,因而新年为此后的第二个朔日,即1985年2月20日。但对越南所在的东七区而言,冬至为12月21日,故12月22日开始的农历月不包含冬至,该月只能是腊月。冬月初一需倒推到之前的11月23日,而越南新年则是12月22日之后的一个朔日,即1985年1月21日。

其他历法中也有天文观测与规则排算并行的例子,如伊斯兰历(阴历)和波斯历(阳历)都是基于天文观测的,但表式伊斯兰历(tabular Islamic calendar)和波斯历(如2820年683闰法)则是基于规则排算的。 ↩

DE431历表用于定朔、定气,而对于历史上的平朔或平气,我采用了寿星天文历拟合的参数。 ↩

尤其是作者的《月相和二十四節氣的計算》一文,包含了相关天文概念的简要介绍以及具体计算过程与模型公式等。 ↩

IAU2006/IAU2000A使用P03岁差模型代替原先IAU2000A模型的岁差部分,2006年IAU大会通过了使用该模型的决议。 ↩

如冬至与合朔为同一天,该日即冬月初一,即便合朔的具体时刻晚于冬至时刻。 ↩

不过采用定气法后闰冬月和闰腊月其实十分罕见,尤其是闰腊月,下一次将出现在千余年之后。 ↩



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3