有关农历的一些估算
作者:谭笑风
1.每年什么时候过春节?(即算每年春节的公历日期)
通过查历书,我归纳出的估算方法如下:
把公历年份y除以19后求得余数a,再把a乘以19得19a,再除以30求余数b,余数b即为过春节的大致公历日期,与实际日期相差一般不超过一天。
计算公式为f(y)≡19*(y-19*[y/19])(mod30),[y/19]表示y/19的商的整数部分
注:春节的公历日期的范围是闭区间1月21日到2月20日,
如果得到b=21,则春节可能在1月21日,1月22日,或2月20日;
如果得到b=20,则春节可能在2月19日,2月20日,或1月21日。
举两个例子,
例如当y=2005时,2005/19=105…10,所以a=10, 19a/30=190/30=6…10,所以b=10,即春节在2月10日左右,实际2005年春节是在2月9日,只差一天;
例如当y=2006时,a=11,b=29,即春节在1月29日左右,实际2006年春节就是在1月29日。
再找找这其中的原理:一个公历回归年有365.2422天,一个农历朔望月有29.5306天,365.2422/29.5306的渐进分数是12+1/3,12+2/5,12+7/19,……这里12+7/19是一个比较精确的渐进分数,就是说每个公历回归年比没有闰月的农历年多出约一个朔望月的7/19,所以每19年就多出约7个朔望月,这就是3年1闰,5年2闰,19年7闰的由来,在19个回归年中加7个闰月后,公历和农历只差0.0892天(2个小时左右),积累到200年左右才差一天,可见非常精确,所以我把19作为计算周期(把年份除以19求余数的依据)。另外,29.5306*7/19约等于11,就是说每年的春节日期都要提前11天左右,如遇到前一年有闰月,则推迟19天左右,所以要把余数a乘以19得19a,再除以30求得余数b,这样a增加1,则b增加19或减少11,不会超过30。
注意:我这里19a中用的因子19以及除以30求得余数中的模30是为了方便计算,实际上更精确一点的因子和模应该分别是29.5306*12/19和29.5306,不过这样算结果也不是特别精确的,因为19年7闰中19这个周期是近似的,把公历年份y除以19后求余数a这样做其实还是近似计算。因此为了计算方便,还是取整数为好。
2.有关闰月
24节气中,立春是节(节气),雨水是气(中气),惊蛰是节,春分是气,依次间隔类推,农历中的闰月一定是有节无气的月,如2004年闰二月中只有清明一个节,农历月份中有气无节不闰,有节无气不一定闰。一个农历年中有两个月同时满足有节无气的情况也存在,如公元2033年,该年农历第八个月和第十二个月都是有节无气的月份。
通过查历书,我归纳出估算闰月的方法如下(有效期上下200年之内):
把公历年份y除以19后求得余数a,
则当a等于下列数时,该年一定闰月
0,3,6, 8或9,11,14,17.
所对应的闰几月,设闰m月,则m大致对应如下(m与实际值最多相差正负1)
8,6,4,10或2, 7, 5, 3.(记个位,记忆口诀:0369147,8642753.)
当a=8时,m=10,闰九月或闰十月,也可能这一年不闰月,那就要等到下一年,即a=9时,m=2,闰二月或闰三月,2004年就是a=9(闰二月)这种情况。
试着找找这其中的原理:每个公历回归年(365.2422天)比没有闰月的农历年(29.5306*12=354.3672天)多出10.875天,即每12个朔望月多出10.875/29.5306个朔望月,所以每32.5855 (12*29.5306/10.875)个朔望月多出1个朔望月,就是说农历大约每隔2年零9个月就要闰一个月,这跟我归纳出的算法有点偏差,所以还不能作为算法的原理。实际上两个闰月之间的间隔不是平均的,也许跟月相和地球公转有关罢。
一般闰月的范围是闭区间闰二月到闰十月,我查过上下二百年的历书,没有发现闰腊月的情况。地球绕太阳运行的轨道是个椭圆,太阳在椭圆的一个焦点上。一年间,地球和太阳的距离时近时远。地球离太阳远时,是公历6月左右,运动慢,所以两个中气的间隔长,最长超过31天。按之前平均30.5天的长度算,月份中没有中气的可能性大,所以闰五月机会多。公历12月左右,地球运动快,中气间隔短,最短时只有29天多一点,比农历一个月还短,所以十一月没有中气的可能性小,理论上闰十一月是最少的。
有一个例外情况,就是公元2033年是闰七月还是闰十一月或是2034年闰正月,这有些争议,参看
http://bbs.guoxue.com/dist/o_t/t_167191/start_0/index.html
(1)安排闰七月的大致理由是:先闰后不闰,当年无中气的月份首先出现于七月,就先不就后安排为闰七月是理当所然的。
(2)安排闰十一月的大致理由:2033年中的第八个月,第十二个月和第十四个月都没有中气,没有先闰七月而闰十一月,是因为现行农历是定冬至所在月为十一月,上一年的冬至月(农历11月)和本年的冬至月(农历11月)决定农历年的长度;2032年农历11月至2033年农历11月之间有12个月,所以就不闰七月了。而2033年农历11月和2034年农历11月有13个月,而在2033年冬至后的第一个无中气之月恰好是2033年的第十二个月,所以就定为闰11月了,因为已经闰了11月就不再闰2034年正月了。
(3)安排闰正月的大致理由:如果严格用定气和无中气置闰的规则,则该闰2034年正月。
3.有关农历大小月
通过查历书我归纳出:一般是每隔98个农历月,月大月小的情况几乎完全相同,比如说,农历这个月是29天,再过98个月几乎还是这样,但不是严格遵守。各位朋友可以查万年历验证一下。
我对此作的解释是:已知一个朔望月的天数是29.5306,而0.5306的渐进分数分别是1/2,2/3,8/15,9/17,26/49,867/1634……其中的一个渐进分数26/49=46/98,所以98也是一个比较精确的近似周期。