You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

闰年判定中为何需检查年份是否不被100整除?

闰年规则相关疑问解答

1. 为什么要保留每年的剩余时长并设置闰日?

回归年(地球绕太阳一周的实际时长)约为365.2422天,并非整数的365天。如果完全忽略这个小数部分,只按每年365天计算,每过100年,日历就会比实际季节晚约24天——比如原本固定在3月21日的春分,会慢慢推迟到4月中旬,长此以往,日历和自然季节完全脱节,没法再指导农业生产、节气安排这类和自然节律相关的活动。

设置闰日就是为了把每年攒下来的小数部分补回去,让日历尽量贴合回归年的实际时长,保证日期和季节的对应关系长期稳定。

2. 为什么闰年判定要检查年份是否被100整除?

闰法的演变逻辑:

  • 早期的儒略历采用每4年一闰的规则,这样每年平均时长是365.25天,但这个数值比实际回归年的365.2422天多了0.0078天(约11分钟14秒)。单次误差看似微小,但每100年就会多算约0.78天,差不多快1天了,几百年下来误差会累积到影响日历准确性的程度。
  • 后来的格里高利历修正了这个问题:能被100整除的年份,默认不闰——这就是你看到的这段代码的核心逻辑。这么做之后,每100年就少闰1次,把之前多算的误差拉回来。

完整的闰年判定规则:

你提供的代码只是规则的一部分,完整的判定逻辑是:

  • 能被4整除,但不能被100整除的年份,是闰年;
  • 能被400整除的年份,也属于闰年(比如2000年是闰年,1900年不是)。

调整后,每年的平均时长为365 + 97/400 = 365.2425天,和实际回归年的误差缩小到约每3000年才差1天,精度足够满足日常需求。

代码片段解析:

// Else If a year is multiple of 100,
// then it is not a leap year
if (year % 100 == 0)
    return false;

这段代码专门处理“能被4整除,但同时能被100整除”的情况——如果没有后续的400整除判断,它会直接返回false(判定为非闰年),对应格里高利历中“百年不闰”的规则。如果是能被400整除的年份,会在这段代码之前或之后补充判断,最终返回true。


内容的提问来源于stack exchange,提问作者karthick H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:06:32