农历漫谈

最近网上为Chinese New Year还是Lunar New Year争得好厉害,以至于中国农历是阴阳合历这个知识又普及了一点点。“十九年七闰”很多民族的古人都发现了这个规律,简单地说就是太阳的周年运动周期跟月相变化周期不是一个整数比关系,不可能舒服漂亮地一年正好等于n个月,而最实用的一个公倍数逼近是235个朔望月=19回归年,误差只有两个小时多一点。如果今年冬至太阳最低的那天,月亮正好上弦,那19年后的冬至,月亮就会恰好又是上弦。(1回归年=365.2422天,1朔望月=29.53059天,1回归年=12.368朔望月)


在19年里,让12年有12个朔望月,另7年多一个朔望月,这样就能凑出12x12 + 7x13 = 235个月,照此安排可以使年与月长期保持大体稳定的同步关系,不会春节过着过着跑夏天去了。当然,免不了的缺点是闰月带来的短期震荡和日期的不恒定。比如俩人都生于二月初八,但是不同年,一个可能春寒料峭,另一个却已春暖花开。更不用说还有那些尴尬地生于闰月的人。

如果你还知道自己的阴历(准确地说,农历)生日,那你知不知道当你的实足年龄是19的倍数时,你的阴历和阳历生日又会回到一起?经常是同一天,有时因细微差距被放在相邻的两天。 那为什么不是一定同一天呢?

简单地说,中国农历发展到南北朝时期就已经不满足于”十九年七闰“机械重复所能达到的精度了,采用了更精细的设计,后面的发展更是一路精益求精,以至早就超过了民用历法所需要的精度,到现在中国的农历几乎就是一部天文年历,精度远超其他各国现存的阴阳历。现在的农历一切都要以天文观测为基准,精确到分秒,节气等重要时间节点一点也不许差,置闰月的规则非常复杂。早就有批评者认为民用历法没必要搞到这么复杂。

前段时间网上因农历起争论的时候,民族派常说的一句错话是中国农历是阴阳合历,世界上独一无二。前半句是对的,后半句错了。实际上几乎相反,世界各国的古老历法大多数都是阴阳合历。古代没多少娱乐生活,一天到晚、一年到头就是天上的日月星辰走来走去的,空气又好又没有灯光污染,但凡一个文明学会了做记录,很快就会发现寒来暑往的周期是365天,多积累几年就会发现大约是365.25,而记到19年时就会发现日月周期又回来了。大多数历法很自然的想法就是记录和预见寒来暑往、日月之行,世界上只有少数几种历法是索性放弃了月亮运动而成为纯阳历,如罗马历—>儒略历—>格里历(公历);或放弃了太阳运动而成为纯阴历(伊斯兰历)。

中国农历真正做到了极致,而成为世界上独一无二的,是历法的精度。农耕的实用需求并没有那么大的驱动力,真正推动中国历法走向这个高峰的是政治哲学驱动力,即“天人合一”的思想。历代政权理论上都是受命于天,都把历法当作皇权象征,天文历法机构属于国家禁地,历法精度上近乎宗教性地追求“与天密合”。另外,帝王对日月蚀的迷信恐惧,催生了中国历法对日月食预报精度的极高要求。准确预报日月食,尤其是日食,需要有高精度的日月位置、运行轨迹、速度数据和精细的算法,还要考虑地理位置和时差。在中国古代,历来日食预报是对天文官员的一项大考。

明末来的耶稣会传教士意大利人利玛窦,惊奇地发现中国皇帝对历法的精度有无与伦比的痴迷。当时明朝基本沿用元朝郭守敬《授时历》,只是改名叫《大统历》,运行几百年后已经逐渐精度不够,崇祯皇帝对此问题极度重视。利玛窦从中看到了有利于传教的机会,写信请求教会速派一批懂天文历算的传教士带西洋最新天文数据和理论来华,必能一举站稳脚跟取得信任,对传教事业大大有用。著名的德国人汤若望就是这批新派来华的传教士之一。反民族派常说的一句错话是,你们那宝贝农历是德国传教士做的。实际上汤若望是跟徐光启等人一起工作,在郭守敬历法的基础上做了若干改进,并使用了丹麦天文学家第谷的行星模型和数据,只能说是中国历法几千年来多次改进中的一次。这部《崇祯历书》还没有完全改好,徐光启就去世了,改好后还没颁行,明朝就亡了,汤若望在清朝才推动新政权将之颁布为《时宪历》。因是外国人,又是传教士,还占据了钦天监监正的高位,汤若望遭儒生杨光先等人嫉恨和政治攻讦。康熙早年鳌拜主政时期,汤若望险些被凌迟处死,其手下汉人专家官员还是被杀了五位,新历法被废,垂老的汤若望本人也一病而逝(《康熙历案》),直到康熙亲政才得以平反,《时宪历》恢复。

那些高赞汤若望的,把他说成给中国带来现代科学的人。实际上,那批传教士带来的天文学很不系统,甚至芜杂矛盾,他们毕竟不是专业天文学家,个人所学师承又不相同。另外,新改历法比明朝原先历法预报日食精度大为提高的说法,现在看来也是有问题的。实际上更可能的是有些提高,但并不总是更好,传教士们在转明入清期间删改了很多不利的记录。毕竟是传教士,不是纯科学家或慈善家,传教动机始终在那里,做出什么事都有可能,要谨慎对待。这段历史现在已经是科学史研究的热点,最近一二十年研究成果颇丰。

(微博原发 2022-02-06、2022-02-11)