中国可实际考据的真实历法,从殷商甲骨卜辞的记录开始。
殷商置闰
从盘庚迁殷到商纣亡国的二百七十三年中,有足够丰富的“殷历”资料。
殷历已实行“置闰”,一部分置于年末,称“十三月”;还有一部分置于年中,沿用上月的“月名”。但其中所体现的规律十分明确——即阴历的置闰,一般设置于三、六、九和十二月之后,基本是“等距”安排。
学者们认为,这一定与殷人观测星象和测量日影存在对应关系——冬至、春分、夏至、秋分一定出现于殷历的三、六、九和十二月。所以,殷人通过天文观象,在这几个月之后“置闰”,其所要取得的效果,就正如《尚书·尧典》所强调的“以闰月定四时成岁”原则一致,为了消除“岁差”。
西周置闰
西周置闰的资料,反而比殷商还少。通过金文看,当时置闰的方法,基本与殷商相同。
所置闰月,金文中都用“正”字,如“正二月”“正四月”“正六月”等等。过去,把“王正月”,一般皆为“周王在正月”,但如此解,便无法解读“王正九月”这样的记载。若皆为“王历闰九月”便能说通。但金文中,也有“十三月”之谓。
总之,西周置闰,仍基本属于未完全解开之谜。
春秋战国置闰
春秋时期的历法,显然已经进入“推步”阶段。这根源于当时对“冬至”的测定已很准确——即下一年冬至的太阳照影必定向后推迟四分之一日,由此产生了“四分历”。这个结论,是因为《春秋》准确记录了三十三次日食。
“四分历”太阳回归年的长度是365.25日,而朔望月的平均长度则为29.5306日,十二个月实为354到355日。照此计算,三年按朔望月计算,就少了33日,即便三年一闰,仍无法保证与太阳回归年“整齐划一”。
于是古人发现,十九个太阳回归年长度为6939.75日,这与235个朔望月长度几乎相等。
“四分历”的365又1/4,古人称为“岁实”;朔望月的29又499/940,古人称为“朔策”。古人把“岁实”和“朔策”统一起来的方法,就是十九年七闰。
“十九年七闰”,古人称之为“章”,或“太阴周”,19称“章岁”,7闰称“章闰”,235称“章月”。再进一步,四个“太阴周”或“章”,合共76年,古人称“蔀岁”,所含940个朔望月称“蔀月”,27759日称“蔀日”。
每经一“蔀”,同一历日可回到上一“蔀”同一日的同一时刻。不过,因为不能被60整除,时刻虽然相同,干支日却不相同。
古人接着计算,如果二十“蔀”,总共1520年,555180日,古人将之称为 “纪”;又称三“纪”为一“元”或“历元”,也就是4560年。因为可以被60整除,一“元”之后,年、月、日、节气和干支都讲回到原来的位置。
“纪元”一词,由此而来。“新纪元”,表示在原有基础上“新时代”的开始。
反映春秋这种“四分历”的资料,有属于战国时期的“古六历”,保存在《汉书·艺文志》中。所谓“古六历”,实际是各诸侯国强大之后,各自实行的不同“岁首”的历法,其本质上均属“四分历”毫无差别。
春秋战国,大致上是19年7闰,置闰的月份,是按照“二十四节气”在各月的分布,采取“无中置闰”。
许多学者认为,这个办法,其实是从殷商沿袭下来的。
汉代以后的置闰
太初元年(前104年),汉武帝张榜招募制历方案,最后在十八个历法中,钦定了邓平方案,就是《太初历》。
《太初历》仍然是19年7闰。不过,邓平为了讨好武帝,将朔望月定位29又43/81日。这与当时星占、谶纬盛行可能有关,九九八十一被认识是“万数之本”。此方案遭到司马迁在内的许多天文学家的反对,但武帝一意孤行仍然执意颁行。
因为漏洞太大,到东汉章帝元和二年(85年),《太初历》就被编䜣、李梵等重修的《四分历》代替了。
此后出现的重大进步,是南朝祖冲之制定的《大明历》。
他提出了391年144闰的“置闰”法。他这个方法,是以对精确测定“回归年”长度为基础的,其“月长”与真实长度误差不足一秒;“年长”与真实长度误差仅52秒。
可惜的是,祖冲之的《大明历》遭到了朝廷宠臣的激烈反对。直到他去世十年之后,才在他儿子祖暅再三请求下,得到梁武帝萧衍的准许,于梁天监九年(510年)实行。
唐代以后,天文学家已经不再继续讨论“置闰”的“闰周”问题。
所以,一直到现在,农历“置闰”,有两个大原则——一是“无中置闰”;二是“十九年七闰”。但是,因为从祖冲之开始,再到后世,对天象观测及计算更为精确,“置闰”也就更为精确了。
在历代历法中,《太初历》不管怎么说也是开创性的,但假托《周髀》。唐玄宗时期由僧一行编制的《大衍历》,已具有创建性的创新和崭新算法,却附会易象。
但最值得一提的是元代郭守敬的《授时历》,全凭实测,皆据晷影,完全依靠的是科学,而不掺任何杂意,也非常之精确了。