同一个阴历日子,年年都过,翻到阳历年历上却对不上号:上一年的中秋还在九月中旬,这一回可能已经挪到十月初;端午有时在六月上旬,有时还在五月下旬。名字没变,数字变了。这套差别并非谁记错了,而是两套计时体系的长短本来就不一样。把它们各自的算法摆出来,浮动的来由便一目了然,也就不会再觉得这件事有什么蹊跷。
旧历的月份服从月相:从一个朔日走到下一个朔日,平均间隔约二十九天半,所以一月只能排二十九天或三十天。十二个月累加,一年大致是三百五十四天或三百五十五天。公历的一年则跟着太阳,平年三百六十五天,闰年三百六十六天。两者相比,阴历平年短了十一天上下。若听任这个差额累积,过不了几年,本该在冬末的节日就会提前到深秋,寒暑与月序彻底脱节,农时也就无从谈起,节令与月份一旦错位,播种与收割都会跟着乱套。古人很早就注意到这个缺口,并给出了补救办法。
补救的方式是设置闰月,依据是节气里的中气。十二个中气各自对应一个固定的月序,若某个月从头到尾没有落进任何一个中气,这个月就被定为上个月的闰月。于是有时一年有十三个月,长达三百八十三天上下;有时只有十二个月,三百五十四天左右。年份长短参差不齐,落在里面的节日自然也难以固定在旧历的同一个号码上,隔几年就要补一次差。插闰的位置并非随意挑选,而是由中气与月首的相对距离决定,所以哪一年闰、闰在哪个月之后,都能事先算出来,这个多出来的月份也常被称作闰位。
把长短不齐的年份与固定的旧历号码相对照,起伏就显现出来。某年没有闰月,位置便往前提;某年多出一个闰月,位置又骤然退后约十九天。三年左右退一次,退完再慢慢前移,一进一退之间,同一个阴历日子的公历坐标就散开了几周,落在九月的可能是上旬,也可能拖到十月。跳动并非无章可循:十九年里插入七个闰位,误差被抹得相当小,新旧两套历法的对应关系大致以十九年为一轮回摆,某些节日的公历位置经过一轮之后又会回到附近。
步骤很朴素。先看这一阴历年有十二个月还是十三个月,再把目标月之前各月的大小逐一相加,得到距离正月初一的天数,再把这个数目加到该年正月初一对应的公历日子上。若有闰位,还要确认它排在哪个月之后,因为它会把其后的所有月份整体推后。逐月相加最容易忘记的是月有大小之分:二十九天的月与三十天的月只差一天,十二个月累积下来,误差可以放大到一周以上,结果就偏出去不少。查表时把每月的天数写清楚,不要凭印象估价。
完成相加之后,还应对照该年的节气时刻核对一遍,看节令与月序是否对得上,对不上就说明某一处数错了。这一步花不了多少工夫,却能挡住大部分笔误:大小月的排列年年在变,去年三十天的月份,今年可能只有二十九天,凭印象去凑,差一天就会让后面的结果整体偏移。这种互校的办法比单查一边稳妥。有人觉得公历号码年年变就说明阴历不严谨,其实恰恰相反:旧历一边照看月亮,一边用闰月把季节拉回来,兼顾了两件事,代价就是数目上与公历对不齐。要的是一款能同时对应月相与寒暑的日历,而不是号码整齐的那种。
这种浮动只是历法结构造成的结果,谈不上吉凶,同一节日在不同年份落到阳历的哪一天,不影响节日本身的内容,也不构成任何暗示。想知道某个阴历节日当年落在阳历哪一天,翻一翻当年的年历最为省事,比凭记忆推测可靠得多。