历法的历史 - 从儒略历到格里历及其演变
历法是人类的发明,而非自然事实。从儒略历到格里历的转变历经数百年才完成,许多其他历法至今仍在使用。本文概述了历法的基本原理、1582 年的改革,以及 21 世纪仍然活跃的各种历法。
回归年,即地球绕太阳公转一周所需的时间,约为365.2422天。如果我们使用固定的365天历法,每年就会与季节产生约0.2422天(5小时48分46秒)的偏差。一个世纪后,累计误差将达到24天,最终导致夏至出现在隆冬时节。闰年的存在正是为了吸收这个小数部分的差额。
这一概念可追溯到古埃及的天狼星周期,并在公元前46年由尤利乌斯·凯撒引入的儒略历中被正式确立。儒略历每四年增加一天,使平均年长为365.25天。这仍然与真实回归年存在偏差,但误差已缩小到每年约11分14秒,大约每128年累计一天。
到16世纪,儒略历已与季节偏差约10天,导致复活节的计算出现问题。教皇格里高利十三世在1582年实施了一次全面改革。1582年10月4日(周四)的次日直接变为10月15日(周五),立即消除了累积误差。英国及其殖民地直到1752年才采用这一改革。
此次改革还修订了闰年规则:能被4整除的年份为闰年,但能被100整除且不能被400整除的年份除外。这样每400年中闰年数量从100减少为97,使平均年长为365.2425天。与回归年的剩余偏差仅为每年0.0003天,约3300年才会累积一天的误差。
100年和400年规则只在世纪之交才显现出来。1700年、1800年和1900年能被100整除但不能被400整除,因此不是闰年。相反,1600年和2000年能被400整除,因此是闰年。对于今天在世的大多数人而言,2000年是他们一生中唯一经历过的400年闰年,而许多人甚至从未注意到它的特殊地位。
该例外规则下一次生效是在2400年。在此之前,2100年、2200年和2300年尽管能被4整除,但都将是平年。大多数软件都能正确处理这一点,但如果你的测试数据只覆盖21世纪,那么100年例外分支可能永远不会被执行,隐藏的细微bug将在下一个世纪之交浮出水面。
自行编写闰年判断代码时最常见的bug是只使用能否被4整除这一条规则。JavaScript的new Date(2100, 1, 29)会悄悄溢出为3月1日,但如果自定义的日期计算忽略了100年例外规则,就可能产生一个不存在的2100年2月29日。边界值测试必须始终覆盖2000年、2100年和2400年,以行使规则的所有三个分支。
更安全的做法是尽可能使用标准库。Java的Year.isLeap()、Python的calendar.isleap()以及PostgreSQL的日期函数都封装了完整的格里高利历规则,积累了数十年的bug修复。只有在嵌入式系统或需要处理标准库不支持的特殊历法时,才有理由自己编写判断逻辑。
即便是格里高利历,每3300年也会产生一天的偏差。19世纪天文学家约翰·赫歇尔曾提出进一步的修正方案:将能被4000整除的年份视为平年。这条规则从未被正式采纳,但如果实施,平均年长将缩短为365.24225天,更接近真实回归年。
到4000年时人类是否仍在使用格里高利历本身就是一个未知数。更实际的问题是数据连续性:现有的每一个时间戳都假定采用格里高利历规则,因此任何未来的改革都需要处理历史记录的遗留问题。目前,没有任何国际公认的规则来管理3000年以后的闰年。
出生在2月29日的人(有时被称为“闰日宝宝”)每四年才能庆祝一次真正的生日。不同国家对非闰年的法定年龄处理方式各异。大多数使用2月28日或3月1日作为替代日期,但法律解释可能影响驾照资格和养老金计算等事项。
奥运会、美国总统大选和FIFA世界杯都以四年为周期运行,但它们与闰年的对齐纯属巧合。统计观察者有时注意到闰年常与重大全球事件重合,这助长了“闰年是世界发生变动的年份”的印象。这种规律究竟反映的是因果关系还是对令人难忘的年份的简单偏见,本身就是一个值得探究的问题。
这篇文章对您有帮助吗?