现代中国人用的日历上,对于同一天往往会显示两个日期。一个是全球通行的格里历(公历)日期,另一个是中国传统的农历日期。比如格里历2022年6月13号,就是农历的壬寅年五月十五号。
农历是全球各国、各民族现用的历法中,为数不多的“天文历”,也就是完全依照天象确定年、月、日序数的历法。除了农历以外,印度民间仍然在使用的古印度历法(Hindu Calendar)也是“天文历”。其基本特点大致有这些:
①以月相变化的规律(朔望月)确定月份内的日期。每个新月(即太阳和月亮看起来离得最近的时刻,现代天文学定义为“太阳和月亮运行到黄经度数相同的时刻”)所在的日期为一个月的第一天。也就是说,你看一看当天晚上的月亮是什么样子,你就大概能知道当天是几号。如果你看到的是一弯向右偏的月牙,就差不多是三号或者四号;如果到了晚上,你看到一半月亮高悬于夜空当中,那就是八号或者九号前后。如果看到的正好是个圆月,那就是十五号或者十六号前后了。如果你在早上看到一半月亮在天空高高挂起,就是二十三号或者二十四号了。
因为月相变化一轮的平均周期是29.53059天,所以农历的一个月只可能是29天或30天。有29天的月份叫“小月”,有30天的月份叫“大月”。一般来说,朔望月的长度在同一个回归年内的变化有规律。在北半球冬季的时候,朔望月长度会短一些,一般在29.3~29.4天左右;在北半球夏季的时候,朔望月长度会长一些,一般在29.6~29.7天左右,最长的可以到29.8天。
用奥利奥啃的月相变化图
②以气象物候确定月序。也就是说,你可以通过气象物候变化大致知道现在是几月。比如说,天气一天天变暖和了,河流解冻了,就差不多是正月;再比如,白天特别长,而且气温很高了,就差不多是五月。
③用置闰月的方法调和季节变化和月相变化,使得月份的数字和季节、物候变化大体能对上。一般来说,季节变化一轮的平均周期是365.2422天(即一个回归年),月相变化一轮的平均周期是29.53059天。两个数字做除法的结果,大致是12.37。
但是,农历的月份必须是完整的月相变化周期,每个月的第一天必须出现新月。所以你给一年配12个月的话,一共就是354天左右,离季节变化一轮的周期还差11天。长此以往,如果某一年的新年在冬季,十几年以后,新年就跑到夏季去了。
人们发现,定12个朔望月为一年的话,3年下来,日历上的新年和季节变化就能差33天,差不多是一个月了。所以人们就把第三年多加一个月,把这个差值给补上。这加上的一个月就是“闰月”,所以农历有“平年”、“闰年”的说法。平年有12个朔望月,有354天左右。闰年有13个月,有384天左右。
一般来说,每连续19个农历年里,会有7个闰年。即:回归年长度÷朔望月长度≈12又7/19。换句话说:19个回归年长度和19×12+7=235个朔望月长度大致相等。
中国古人曾经把19个回归年叫做一个“章”,把19叫做“章岁”,把7叫做“章闰”,把19×12+7=235叫做“章月”。古希腊也有所谓的“默冬章”(Metonic Cycle),跟这个差不多。后来,祖冲之更加精确地测定了回归年和朔望月的平均长度,认为回归年长度÷朔望月长度≈12又144/391。即:定“章岁”为391,“章闰”为144,“章月”为391×12+144=4836。
所以,农历是“阴阳历”,不是“阴历”。正经的“阴历”只要保证按照月相确定月份内的日期就好了,至于一年有几个月,完全随意。只要你开心,你定一年有一千个月都没问题。除了农历以外,中国藏族人口使用的藏历、以及以色列人用的希伯来历也属于“阴阳历”。
第二十四届冬季奥运会开幕式上放的二十四节气倒计时小片子里面,把“农历年”翻译成“Lunar Year”,其实不对。正确的翻译应该是“Lunisolar Year”。
农历中,“阴”的部分在于以月相确定月份内的日期。你抬头看看今天晚上的月亮长什么样子,就能知道今天是几号。“阳”的部分在于用二十四节气固定月序,以及安排闰月。你感受一下季节物候,就能知道现在大抵是几月。
现在世界上的主流历法里面,只有中东人常用的伊斯兰历是“阴历”,一年只有354或355天。这是因为中东那边一年到头都高温、干旱,气象物候变化不怎么大,所以他们的历法不太需要能够显示气象物候的变化。再加上伊斯兰教徒对于月亮很崇拜,所以他们就用了纯阴历作为自己用的历法。
现在人们用二十四节气里的十二个“中气”(冬至属于中气,过后,隔一个节气就是一个中气)来判断什么时候置闰月。十二个中气就是固定十二个月份数字的“钉子”,没有“中气”的朔望月就是闰月。比如说,冬至是十一月的“钉子”,雨水是正月的“钉子”,大暑是六月的“钉子”,处暑是七月的“钉子”。这样可以保证月份数字和气象物候变化大致能对上号。也就是说,正月到三月大概是春天,四月到六月大概是夏天,七月到九月大概是秋天,十月到十二月大概是冬天。
其实中国古人讲的“历法”本质是天文算法,也就是用数学方法去预测任意时刻,宇宙中的各个天体的位置的算法体系。打个比方,比利时天文学家Jean Meeus在1990年代出版过《天文算法》(Astronomical Algorithms)一书,这也可以算是一种“历法”。至于“今天是哪一年的几月几号”这个信息,只是用“历法”算出来的结果而已。
中国历史上一共用过很多种历法。目前现存最古老的有完整算法记录的历法是汉朝的天文学家落下闳主编的《太初历》,于公元前104年启用。在《太初历》启用以前,人们也用过《颛顼历》等更古老的历法,但是这些历法的计算方法现在大多失传了。《太初历》以后,中国人也用过《大明历》(南北朝祖冲之主编)、《麟德历》(唐朝李淳风主编)、《统天历》(宋朝杨忠辅主编)、《授时历》(元朝郭守敬主编)、《时宪历》(明末徐光启、清初汤若望等主编)等历法。
一套完整的中国古代历法,一般由七部分算法构成:
1、步气朔:计算二十四节气、朔望弦晦月相的日期、时间,从而排定每一天的农历月序和日期。这是直接关系到民用的部分。
2、步发敛:计算七十二候、六十四卦、五行用事的日期、时间。这个其实是太阳周年运动的补充计算,跟中医里讲的阴阳二气理论有关。日本人有“雑节”(ざっせつ)的说法,就是在二十四节气的基础上,依照太阳的周年运动制定出来的其他日期节点。日本人现在用的日历上仍然会标注除“雑节”的日期。这个也可以算是“发敛”。
3、步日躔:计算某给定时刻的太阳天球坐标。
4、步月离:计算某给定时刻的月亮天球坐标。
5、步晷漏:计算某给定日期的昼夜长短、正午表影长度。中国古人用圭表来测定季节,即在地面上垂直立一根长度已知的棍子作为“表”,在正午(即棍子的影子指正北方)的时候,测定棍子的影子长度。通过影子的长度,可以得知当日正午的太阳高度角,进而得知太阳直射点的纬度。
6、步交食:计算在某指定地点(一般为每个朝代的国都所在地)能够看到日食、月食的日期、时刻表。
7、步五星:计算某给定时刻的金木水火土五大行星天球坐标。
一般来说,一个新的王朝开始了以后,新皇室要办的一件重要的事情,就是重新编订更加精确的新历法。因为任何一套历法所用的天文常数、算法等都会或多或少有些误差。这些误差,在一年、两年内还看不出来,用了几百年以后就能看出来了。比如说,有的时候,你会看到在日历上的某月三十号或者二号发生日食,这就是严重的bug(因为按照农历的定义,日食必须在某个月的一号发生)。
日本历史上长期使用中国唐朝中后期颁行的《宣明历》,用了八百多年,从公元9世纪用到17世纪。到了17世纪,人们发现用《宣明历》的算法算出的天文现象发生的时间,和实际情况有的时候能差两天。于是,日本人受不了了,自己写了一本《贞享历》出来,取代《宣明历》。2012年上映的日本电影《天地明察》描述的就是日本人编纂《贞享历》前后的一些故事。
《天地明察》海报
在二十四史中,大部分史书里都有《历志》或《律历志》的部分,记录每个朝代官方历法的天文算法。《清史稿》里面也有《时宪志》的部分,记录《时宪历》用的天文算法。但是,想要看懂这些史书中收录的算法术文,需要比较深厚的天文学知识以及文言文阅读能力打底。
再厘清一个概念,“农历”这个词其实是东亚地区用过的所有阴阳历的统称。也就是说,《太初历》、《大明历》、《麟德历》、《授时历》、《时宪历》等都是“农历”,其主要特点都是本文第一部分介绍的那一些。日本人自己编纂的《贞享历》、《宝历历》、《宽政历》、《天保历》也算是“农历”。
在明朝末期的崇祯时代,人们发现,明朝皇室用的《大统历》有很多bug。主要的bug在于用《大统历》的算法计算日食、月食的时间表,经常和实际情况对不上。
《大统历》本质上和元朝郭守敬主编的《授时历》没什么区别,除了历元(进行天文计算的基准点)以及少部分算法被改了以外,其他的大部分算法都从元朝开始一直沿用。也就是说,人们实际上用《授时历》的算法一口气用了三百多年,不出bug才怪。
明朝末期,有不少西方的传教士来中国推广基督教,也连带着推广了西方的天文知识体系。明末的中国数学家徐光启和意大利传教士利玛窦(Matteo Ricci)、德国传教士汤若望(Johann Adam Schall von Bel)等人一起,合作编纂了新的历法,命名为《崇祯历书》。徐光启是上海人,他的家乡原本叫“法华汇”,现在为了纪念他而改名叫“徐家汇”。
《崇祯历书》编制的基本规则仍然和中国历史上的其他历法一样,以月相定日期,以气象物候定月序,用闰月调和太阳、月亮的运行规律。但是,《崇祯历书》中用来计算太阳、月亮位置的方法,全都改成了西方人用的方法。除此以外,《崇祯历书》也编入了哥白尼的《天体运行论》以及球面三角学的相关内容,也告诉了中国人“地面实际上是个圆球,叫做地球”。
徐光启和利玛窦把《崇祯历书》敬献给明朝皇室之后,由于皇室内部不少人认为“祖宗之法不可变,用洋人的方法编制历书,是瞎胡闹”、以及明末战事太多等因素,《崇祯历书》一直没能够正式颁行。
关于中、西方天文算法的主要差别,就用求解太阳周年视运动的实际速度(用现在的话说,就是地球绕太阳公转的角速度)与平均速度的差值来举例子。
中国古代历法中,求解太阳周年视运动的实际速度和平均速度的差值,一般用多次函数来拟合。《授时历》以前多用二次函数,《授时历》用三次函数拟合。而当时的西方人求解这个速度差值,则是用三角函数拟合。
三角函数最早是古希腊人用的,明末之前的中国数学书籍中没有一本讲过三角函数。所以《崇祯历书》里面还要专门附录《割圆八线表》,即三角函数表。当然,现在国际通用的求解天体位置的算法中,直接用到微积分、线性代数之类的东西了。
后来,明朝没有了,满族人攻进了山海关,明帝国变成大清帝国了。汤若望把《崇祯历书》中关于明朝政权的内容去掉之后,给它重新定名为《西洋新法历书》(也叫《西洋新法算书》),敬献给新的清朝皇室。
为了验证《西洋新法历书》和《大统历》、以及西域用的《回回历》(伊斯兰历)哪个算得更准确,清朝皇室专门举行了“三历竞赛”。竞赛时间是顺治元年八月初一,即格里历1644年9月1日。那一天在北京可以看到日食,“三历竞赛”的内容就是看看谁家的历法能够把在北京观测的日食初亏、食甚、复圆时刻表,以及食分(太阳圆面被遮蔽的最大深度占太阳圆面视直径的比值)算准了。竞赛的结果是:《西洋新法历书》大获全胜。
按照《西洋新法历书》的算法,1644年9月1日在北京观测到的日食食分为0.28。而按照现代天文算法反推,在北京观测该次日食的食分是0.30。
顺治元年八月初一可观测日食范围图
于是清朝皇室接受了《西洋新法历书》,用它编制历法,并把新的历法定名为《时宪历》。“时宪”这个词来自《尚书》里面“惟天聪明,惟圣时宪”一句。
《时宪历》从顺治二年(1645年)开始,正式在全中国范围内使用,一直用到宣统三年末(1912年初)清朝灭亡。《时宪历》是中国历史上第五次历法革新的产物,它除了把算法内核改成了西方天文知识体系之外,还把计算二十四节气日期、时间的方法改成了定气法。
在《时宪历》之前,中国人计算二十四节气日期、时间的方法都是“平气法”。也就是说,只有冬至(太阳照射到南回归线)的日期、时间是人们实打实测量出来的,把两个冬至之间的时间长度定为一个回归年,约为365.2422天。再把一个回归年的长度平均分为24段,每一段是15天多一点。只要在实测的冬至日期、时间的基础上,把这15天多的时间段反复累加,就能得到其他23个节气的日期、时间了。
《时宪历》中使用的“定气法”则是把黄道(太阳在天空中运行的轨迹,在一个回归年内,太阳沿着黄道运行一整圈360°)按照角度平均分成24段,每一段是15°。太阳在黄道上运行过去15°,就是一个节气。由开普勒行星运动定律可以知道,太阳在天空中运行的速度有快有慢,所以太阳在不同的季节运行15°用的时间间隔不一样长。在北半球的冬天,太阳运行的速度快一点。在北半球的夏天,太阳运行的速度慢一点。
其实早在唐朝的时候,已经有数学家提出,用定气法计算二十四节气日期、时间了。但是,由于在北半球冬季的时候,可能会出现同一个朔望周期里塞进去两个中气的情况,从而导致“无中气置闰法”出现bug,所以很多人反对用定气法。
现在的中国人计算农历,也依照西方人创建的天文模型,计算太阳和月亮的位置。同时,也用定气法计算二十四节气日期、时间,用定朔法计算朔望弦晦月相的日期、时间。其理念和《时宪历》差不多。
有的人说“现在的中国农历是西方人编的”,这话其实不完全对。对的一面在于计算月份、日期用的算法是西方人用的算法,不对的一面在于利用天文现象确定月份、日期数字的规则是夏朝以来中国人一直用的规则。
虽然整个清朝将近三百多年的时间里用的历法都叫《时宪历》,但是其算法内核换过三次。
第一套内核就是汤若望敬献的《西洋新法算书》,从顺治二年(1645)用到康熙十八年(1679)。其历元为崇祯元年天正冬至,即公元1627年12月22日。一年的“天正冬至”指的是其农历正月初一之前的那个冬至日。
第二套内核是《康熙永年历法》,从康熙十九年(1680)用到雍正四年(1726)。这是由比利时传教士南怀仁(Ferdinand Verbiest)编制的新的天文算法书籍,其天文算法和《西洋新法算书》本质上差不多,只是把历元改成了康熙二十三年天正冬至,即公元1683年12月21日。
第三套内核是《历象考成》,从雍正五年(1727)用到雍正十一年(1733)。这套书是钦天监的众多官员们合力主编的,其历元仍然遵从《康熙永年历法》中的历元,即康熙二十三年天正冬至。该书中使用丹麦天文学家第谷·布拉赫(Tycho Brahe)创立的本轮-均轮体系来计算七政(太阳、月亮、金木水火土五大行星)在天空中的位置。
第四套内核是《历象考成后编》,从雍正十二年(1734)一直用到宣统三年末(1912年初),清朝灭亡。这套书把《历象考成》中用的本轮-均轮体系废除了,改用开普勒行星运动定律来计算太阳和月亮在天空中的位置。而且历元也改成了雍正元年天正冬至,即公元1722年12月22日。但是《历象考成后编》只给出了计算太阳和月亮位置,以及日月食时间表的新方法,计算五大行星位置的方法仍然沿用《历象考成》中用的本轮-均轮体系。
人们把按照《康熙永年历法》和《历象考成》编纂出来的日历叫《康熙甲子元历》,把用《历象考成后编》编纂出来的日历叫《雍正癸卯元历》。以上四套历法书所用的时标,都是北京古观象台(东经116°26′)的真太阳时。
《历象考成后编》传到日本以后,日本天文学家高桥至时根据《历象考成后编》的算法,编制了《宽政历》,在日本使用。当然,高桥至时把历元改成了宽政九年天正冬至,即公元1796年12月21日。时标也改成了日本京都当地的平太阳时。《宽政历》在日本一共使用了46年,从宽政十年(1798)用到天保十四年(1843)。
1912年1月1日,孙中山在南京宣布就任中华民国临时大总统。孙中山宣布,定公元1912年为中华民国元年,并引入了西方的格里历为中国官方历法。孙中山将格里历称为“国历”,但是他也没有废除中国传统的阴阳历。孙中山把中国传统阴阳历叫做“夏历”,即“从夏朝开始一直沿用的历法”。
中华民国政府成立以后,他们把清朝的钦天监撤销了,用中华民国中央观象台取代之,进行天文观测、计算。中华民国北洋政府打算在中国境内同时发行格里历和夏历两套历法,也就是在日历上同时写两个日期。
在1912年和1913年,中央观象台的工作人员还来不及学习当时最新的天文算法,就沿用了清朝的《历象考成后编》中的天文算法以及天文常数,算出了这两年的二十四节气、朔望弦晦月相的日期、时间,登载在中央观象台发行的《中华民国历书》中。
《中华民国历书》的地位等于清朝的《时宪书》,只不过《时宪书》中会刊载一些现在看起来属于“封建迷信”的内容,如每天宜干什么、忌干什么,以及什么神在什么方位等。《中华民国历书》把这些涉及“封建迷信”的内容去掉了。
《中华民国六年(1917)历书》封面
从1914年开始,中央观象台的工作人员得到了美国天文学家西蒙·纽康(Simon Newcomb)编纂的日躔表(显示每天格林威治时间半夜0点的太阳坐标的表格),以及丹麦天文学家彼得·汉森(Peter Hanson)编纂的月离表(显示每天格林威治时间半夜0点的月亮坐标的表格)。他们利用这两份表格计算任意指定时刻的太阳、月亮位置,从而计算二十四节气、朔望弦晦月相的日期、时间,进而排定农历月份、日期。
但是,纽康的日躔表和汉森的月离表中用的时标是格林威治标准时间。中央观象台的人们还要把格林威治标准时间改成北京市中心(东经116°23′)的平太阳时,来进行太阳、月亮坐标计算。
1917年2月月历表
中央观象台的工作人员把运用纽康日躔表和汉森月离表计算出来的节气、月相时刻表定名为《新法天文夏历》,编入《中华民国历书》。《新法天文夏历》一直用到了1928年。
1928年6月,国民政府取代北洋政府,成为中国唯一的合法政权。新的中华民国国民政府也把中央观象台废除了,用国立中央研究院天文研究所取代之。
国立中央研究院天文研究所从1929年开始,每一年都发行《国民历》,定名为《中华民国xx年国民历》。《国民历》的地位也等于清朝的《时宪书》。
《中华民国三十七年(1948)国民历》封面
国民政府刚成立的时候,认为农历属于中国文化里的糟粕,打算直接把它禁掉。国民政府甚至直接颁布命令,要求全中国的老百姓不准按照农历日期过节日,尤其是农历新年。在农历的一些重要节日日期,国民政府会派人去抓,看有谁敢在这些“不应该过节”的日期过节日。在1929年的春节,有一位国民党党员仅仅因为讲了“恭喜发财”四个字,就被罚在孙中山雕像面前罚站。国民政府甚至会派工作人员去各地,专门查抄刊载农历日期的历书。
由于国民政府对农历的敌视态度,所以《国民历》里面只写格里历的日期,不写农历日期。但是二十四节气、朔望弦晦月相发生的日期会标注出来。对于一些按照农历过的中国传统节日,在《国民历》里面改成了对应的格里历日期。比如,《国民历》把格里历的5月5日标记为“重五”(端午节),把格里历的7月15日标记为“中元”,把格里历的9月9日标记为“重九”(重阳节)。
1948年5月上半月的《国民历》
只有中秋节没有标注为格里历的8月15日,因为中秋节要赏圆月亮,格里历8月15日可不一定有圆月亮给你赏。《国民历》把农历八月的“望日”,即发生满月的日期标注为“中秋节”。这个日期不一定是农历的八月十五号。比如1948年的《国民历》把格里历9月18日标注为“中秋节”,这一天按照农历算,应该是八月十六号。
1948年9月下半月的《国民历》
本来国民政府都不想在《国民历》里面写朔望弦晦月相的时刻表,只想写二十四节气的时刻表。要写节气日期,是因为节气直接关系到农业生产安排,而且节气日期在格里历中基本固定(节气和格里历都根据地球绕太阳公转的规律排定)。至于不写月相日期,是因为人们可以根据节气和月相的日期,把格里历日期转换成农历日期。这样你“禁农历”等于禁了个寂寞。
天文研究所的工作人员据理力争,认为朔望弦晦月相只是自然现象,而且月相和潮汐也有直接关系,进而关系到沿海地区的渔民对于捕鱼作业的安排。所以国民政府还是同意在《国民历》里面写朔望弦晦月相的时刻表了。
一般来说,在新月和满月前后两三天,潮水会比较大(所以“八月十八潮,壮观天下无”)。在上弦月和下弦月前后两三天,潮水会比较小。所以中国历代的历法书中都会把新月、上弦月、满月、下弦月四个月相的日期、时刻标注出来。
天文研究所的工作人员计算二十四节气、朔望弦晦月相的日期、时刻表的方法,也是来自当时西方最先进的天文算法。而且,计算二十四节气、朔望弦晦月相的时标改成了东经120°平太阳时,即格林威治标准时间往后推8小时的结果,也就是今天的中国人用的“北京时间”。
由于农历已经深入中国老百姓的心坎里头去了,所以人们对于农历禁令,往往也是阳奉阴违。比如说,到了农历新年,很多店铺名义上搞“盘点”,实际上是偷着庆祝节日。
在登载了节气、月相时刻表的《国民历》出版之后,中国各地就会有民间人士根据这些时刻表,把格里历日期转换成农历日期,进而自己刊刻农历历书。
这些民间刊刻的农历历书一般会叫《中华民国xx年时宪书》,里面的“封建迷信”内容比清朝官方刊行的《时宪书》都多。国民政府禁了五年的农历,发现屡禁不止,也就不再继续禁止了。
人们把根据《国民历》中登载的节气、月相时刻表而转换出来的农历历书叫做《紫金历》。这是因为,国立中央研究院天文研究所的地址在南京紫金山。
1949年10月1日,毛泽东在北京天安门城楼宣布“中国人民从此站起来了”。
中华人民共和国政府在1950年接收了原来的“国立中央研究院天文研究所”位于南京紫金山大部分遗产,并且在紫金山建立了中国科学院紫金山天文台,用来进行天文观测、农历编纂。
紫金山天文台从1951年开始,每一年会发行《日历资料》,作为中国境内各种日历产品的参考。
《日历资料》中会刊载一个格里历年份里面每一天的格里历日期、农历日期、星期、二十四节气时刻表、朔望弦晦月相时刻表、以及中国境内可观测的日月食预报。
至于节气、月相、日月食时刻表的计算方法,也沿用《紫金历》的理念,与时俱进,时刻学习最先进的天文计算方法,并且以东经120°平太阳时作为时标。也就是说,中华人民共和国政府恢复了农历的“官方日历”地位。
现在,紫金山天文台的工作人员在进行各种天文计算的时候,主要依据美国国家航空航天局(NASA)下属的喷气推进实验室(JPL)所发布的DE430星历表来计算。而喷气推进实验室编纂DE系列星历表所依靠的理论,则是VSOP87行星理论和ELP月亮运动理论。
紫金山天文台发行的2022年1-3月《日历资料》2022年《日历资料》中的月相时刻表
2008年开始,中国大陆的公众假日里面加了清明、端午、中秋这三个农历节日(但是劳动节的七天假被砍成三天了),使得农历更进一步地回归到中国人的日常生活之中。
2017年,紫金山天文台编制了《农历的编算和颁行》作为国家标准,向全国颁布。这套标准规定,任何个人和机构在中国大陆发行的日历产品中,必须同时有格里历和农历两套日期,也必须标注出二十四节气的日期。这套标准“保证了农历编算的准确性和权威性,并有效维护了农历作为国家历法的统一性和严肃性”,也就是正式承认了农历作为国家官方历法的地位。
我记忆中,苹果公司出的各种电子产品(iPhone,iPad之类)内置的日历程序中,以前一直没有农历日期。现在的国行版苹果系电子产品中内置的日历程序里面,都有农历、二十四节气日期了。就连简体中文版Win10电脑系统里自带的日历中,也有农历、二十四节气日期了。只不过这些农历、二十四节气日期都是紫金山天文台的人已经算好了的,微软和苹果只是照着用而已。
在民间,也有人根据时下最新的天文算法、星历等开发农历的万年历程序。比如华中农业大学的气象学副教授刘安国开发的《日梭万年历》、以及福建省莆田第十中学的物理老师许剑伟开发的《寿星天文历》等。许剑伟在中国的天文爱好者圈子里面比较出名,他曾把Jean Meeus写的《天文算法》一书译成汉语,在中国的网络上发行。
这两个软件计算出来的农历日期以及节气、月相时刻表,一般都能和紫金山天文台发布的官方数据对得上。反正农历的编纂本质是天文计算,用的方法都差不多,结果自然也不会差到哪里去。
《寿星天文历》软件界面
其实农历是属于全球所有华人的历法,港澳台人也会用农历,过农历节日。
香港人有假期的农历节日比中国大陆人还要多,中国大陆人只在春节、清明、端午、中秋有假期放,香港人在这个基础上还能多放浴佛(农历四月初八)和重阳两个假。澳门人也一样。
而且,香港和澳门两地的特首每年会发表两次新年贺词,一个是格里历12月31日,一个在农历十二月二十九号(小月)或三十号(大月)。
香港人和澳门人用的农历由香港天文台负责编纂,在香港天文台的官网上会发布“公历和农历对照表”。
我曾经听过一个故事,但是我怀疑这个故事是假的:香港天文台的工作人员在很长一段时间里,一直按照清朝《历象考成后编》中给出的天文算法计算农历日期。他们计算二十四节气、朔望弦晦月相时刻表的时候,一直以北京古观象台的平太阳时作为时标。
1929年,中国大陆这边把计算节气、月相时刻表用的时标改成了东经120°平太阳时,但是香港天文台仍然在按照北京古观象台的平太阳时来计算节气、月相时刻表。因为两套时间系统的差别并不大,只差一刻钟,所以中国大陆和香港两边算出来的节气日期、农历大小月、闰月情况大抵都一样。
到1978年,就出现bug了。紫金山天文台计算出,在北京时间(东经120°平太阳时)1978年9月3日凌晨0:09,会出现月相“朔”。所以紫金山天文台定格里历1978年9月3日为农历戊午年八月一号。然而同样的这个月相,按照北京古观象台的地方平太阳时计算,是1978年9月2日晚上23:54。所以香港天文台定格里历1978年9月2日为农历戊午年八月一号。
这就导致中国大陆和香港的官方日历上,1978年的中秋节(农历八月十五号)差了一天!中国大陆人在1978年9月17日过中秋节,香港人在9月16日过节。
中国大陆人和香港人都蒙圈了,过个中秋节都凑不到一起去。按理说农历的本质是天文计算,算的都是客观的天文现象,怎么算出来的中秋节日期会差一天?香港人后来才明白,他们算农历用的时标和中国大陆用的已经不一样了。所以从1979年开始,香港人把计算农历用的时标也改成了东经120°平太阳时,和中国大陆一样了。
为什么我怀疑这个故事是假的?因为按照香港天文台给出的公历-农历对照表,1978年农历八月初一也是格里历的9月3日。
台湾地区发行的日历里面登载的农历日期,由所谓的“交通部中央气象局”负责发行,不是所谓的“天文研究所”了。在所谓的“交通部中央气象局”的官网上也会有“日历资料表”可供查阅。
他们发行的“日历资料表”中也有节气、月相时刻表。由于台湾人计算节气、月相时间表用的算法也是继承《紫金历》的理念,所以台湾的“日历资料表”中登载出来的时刻表和紫金山天文台发行《日历资料》的大抵一样,偶尔会有一分钟的差别。
尽管两岸计算农历用的天文算法、时标都一样,但是由于计算用的数据精度不一样,有时候算出的时刻表可能会有一分钟的差别,但是总体差别不会很大。
汉字文化圈指的是中国、朝鲜、韩国、日本、越南这五个国家。这五个国家在历史上长期使用汉字,也长期使用农历。现在在汉字文化圈的另外四个国家,农历也依然有生命力。
朝鲜人在日常生活中也会用农历,他们把农历叫做“阴历”(음력)。朝鲜人也用二十四节气,计算节气、农历月份大小的规则和中国都是一样的,只不过把时标改成了朝鲜时间(东经135°平太阳时),是北京时间往后推一个小时的结果。因为有时差的存在,所以有的时候,朝鲜人用的农历日期和中国人用的可能会差一天,节气也有可能会差一天。
在每年的春节(음력설)、元宵节(대보름)、清明节(청명절)、端午节(단오)、中秋节(추석)这五个农历节日里面,朝鲜人要放假。朝鲜人一年内的公众假日比中国都多,而且大多都是那种政治味道浓厚的日期,比如朝鲜国庆、朝鲜劳动党党庆、朝鲜人民军建军纪念日、领袖生日之类的(往往还要再给你搞个阅兵)。
每一天,朝鲜中央电视台在开始播放节目之后,演播室的主持人会先报告“今天是x月x日(格里历),星期x,阴历x月x日”(用朝鲜语念格里历日期的时候,月份和日期都念汉字数词。念农历日期的时候,月份念汉字数词,日期念朝鲜语固有数词)。电视上播报天气预报的时候,屏幕上也会同时显示格里历、农历两个日期。
2022年3月5日(星期六,农历二月初三)的朝鲜天气预报
曾经有一段时间(2015年8月15日~2018年5月4日),朝鲜政府把自己的标准时间改成了东经127.5°平太阳时,和韩国就差了半个小时。很巧合的是,这一段时间中的任何一个“朔”发生的时间,按照东经127.5°和135°平太阳时两套时标来算,日期都是一样的。所以这段时间里面,南北两方的农历日期全都同步。
韩国人用的日历上也会写农历日期。在韩国,每一天的农历日期由韩国天文研究院(한국천문연구원)负责计算、公布。在韩国天文研究院的官网上就有“阴阳历变换计算”(음양력변환계산)的页面。
上面说过,由于韩国和中国用的时标不一样,所以有的时候,韩国人用的农历日期和中国人用的可能会差一天。
比如2020年2月23日,在韩国是农历正月三十号,在中国是农历二月初一。因为在北京时间2020年2月23日晚上23:32会发生月相“朔”,这个时刻在韩国是2020年2月24日凌晨0:32。所以同样的一个农历月的起始日期在中国和韩国就差了一天。
韩国天文研究院官网给出的2020年2月23日阴阳历转换结果。第一行为格里历,第二行为农历,第三行为干支,第四行为儒略日,第五行为月份的大小、平闰情况。
此外,由于时差的关系以及“无中气置闰法”,有的时候同一年中国和韩国的农历闰月不一样。比如2017年,中国农历闰六月,韩国农历闰五月。在21世纪内,有2012、2017、2099这三年的中韩农历闰月不一样。
韩国的公众假日里面,有春节(설날)、浴佛(부처님오신날)、中秋(추석)这三个按照农历计算的节日。韩国天文研究院每一年会发布“月历要项”(월력요항),里面会写每个农历月的起始日期、月份天数、月份干支、月份起始日期干支、二十四节气日期(没有时间表)。没有月相的日期、时间表。
韩国天文研究院发布的《2022年月历要项》中的农历月份表、二十四节气日期表
日本历史上曾长期使用农历,但是从1873年开始,日本官方历法就改成格里历了。
日本人曾经自己编写过四种农历算法,分别是《贞享历》、《宝历历》、《宽政历》、《天保历》。其中,前两部都以《授时历》为蓝本,《宽政历》以《时宪历》中的《历象考成后编》为蓝本,《天保历》是日本人自己根据法国天文学家热罗姆·拉朗德(Jérôme de Lalande)的理论自己编写的(没有中国历书作为蓝本)。《天保历》中计算太阳位置的时候,甚至把金星、木星等行星对地球的万有引力考虑进去了。
现在的日本人把农历叫做“旧暦”(きゅうれき),或者“太阴太阳暦”(たいいんたいようれき)。这两个词在狭义上只指《天保历》这一部历法,广义上指的就是东亚地区通行过的所有阴阳历。
日本官方出版的日历里面已经不登载农历日期了,但是民间发行的日历中,有些会写农历日期。日本民间依然会有人过农历的节日。
日本民间出版的日历中,农历日期的来源是日本国立天文台发布的“暦要项”(こよみようこう)。
日本的“暦要项”里面虽然不写农历日期,但是写了二十四节气、朔望弦晦月相的日期、时刻表。时标是日本标准时间(东经135°平太阳时)。显得和中华民国国民政府时期发行的《国民历》一样。
我突然想到个问题:如果韩国或者日本办奥运会的话,他们在开幕式上也演“二十四节气”相关内容,中国网民会是什么评价?
上面说到,日本人说的“旧暦”在狭义上仅指《天保历》这一个历法。《天保历》的编排规则中,不仅继承了东亚传统阴阳历的全部规则(月相定日期、中气定月序、无中气月为闰月)之外,还额外加了一条“春分必须在二月,夏至必须在五月,秋分必须在八月,冬至必须在十一月”的规则。
而东亚地区通行过的其他阴阳历中,只把冬至当成十一月的“钉子”。《天保历》在冬至这颗“钉子”的基础上,额外把春分、夏至、秋分也当成三颗“钉子”,来钉住一年里的四个月份。
这样的规则就导致人们按照《天保历》的算法计算2033年的农历历表时,出现严重的bug。具体如下表:
十月去哪里了???
日本人想起来,以前的阴阳历中只把冬至当成十一月的“钉子”。到了2033年,四个“钉子”里面有两颗出问题了。面对这种情况,日本人决定:优先使用冬至这颗“钉子”,把冬至“钉”在十一月。而且中国、朝鲜、韩国、越南都这么做。
于是,现在你在日本的日历网站上查询2033年的农历日期,就是这样的:
越南人也用农历,他们把农历也叫做“阴历”(Âm lịch)。越南人用的日历上会写农历日期。
越南应该没有专门的农历计算机构(越南境内没有天文台,一个都没有)。越南人计算农历日期用的天文数据应该都是直接用中国人算好的数据,再把计算节气、月相时刻用的时标转换成河内时间(东经105°平太阳时),也就是把北京时间往前减一个小时的结果。
每个格子里的灰色小号数字是农历日期,农历日期边上那堆字母是当日的干支
越南政府规定的全国性假日里面只有两个农历假日,一个是春节(Tết Nguyên Đán),一个是雄王纪念日(Giỗ tổ Hùng Vương)。雄王纪念日是农历的三月十号。在越南史书里面记载,雄王是越南历史上第一个建立民族国家的人。
此外,越南人也会庆祝元宵节(Tết Nguyên Tiêu)、端午节(Tết Đoan ngọ)、中元节(Rằm tháng bảy, Vu Lan)、中秋节(Tết Trung thu)、祭灶节(Ông Táo chầu trời,农历十二月二十三号)等节日,但是不放假。
上文中说过,因为中朝韩日越五国计算农历用的时标不一样,所以有的时候,对于同样一个格里历日期,在不同的国家对应的农历日期也不一样。
虽然越南和中国时差只差一个小时,大部分天文现象按照两个国家的时间来算,都是同一天。但是,1985年越南人过的春节比中国人过的直接早了一个月。越南人在格里历1985年1月21日庆祝春节,中国人在格里历1985年2月20日庆祝春节。
越南的1985年1月月历,标注1月21日为春节中国的1985年2月月历,标注2月20日为春节
这是由于:农历以出现月相“朔”的日期为每个月的第一天,以没有中气的月份为闰月。
下面把1985年春节前后几个月的中、越两国农历月份表列出:
从表中可知,因为中、越两国的1984年冬至日期不一致,而1984年的冬至和“朔”相隔太近,所以两国置闰月的方法就不一样了,进而影响到春节的日期安排不一致。
此外:越南曾经在1954年-1976年分裂为南、北两个国家,和今天的南北朝鲜一样。有一段时间,北越(越南民主共和国)使用东经105°平太阳时作为国家官方时间,南越(越南共和国)使用东经120°平太阳时。这就导致南北两方在计算1968年春节日期的时候,出现了不一致。
在1968年1月30日凌晨0:29(东经120°平太阳时)会出现月相“朔”,把这个时间点折成东经105°平太阳时,则是1968年1月29日晚上23:29。于是,北越人在1968年1月29日过春节,南越人在1968年1月30日过春节。到1976年,两个越南合体了,越南全境的时标也就都变成东经105°平太阳时了。
所以,农历的一个缺点就在于此:因为农历完全根据天文现象确定日期,所以不同的国家以不同的时标计算天文现象的日期,结果可能会不一样。这就会导致,运用不同的时标计算,算出来的农历日期可能会差一天,甚至可能差一个月。也就是说,全地球有24个时区,就可以排出24套不一样的农历日期表。
当然,除了汉字文化圈以外,别的国家也没什么人使用农历。所以全球各地的华人华侨过农历节日的时候,基本都会按照中国大陆的官方历本,也就是紫金山天文台计算出来的结果来过。