闰年判定中为何需检查年份是否不被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
相关产品推荐
相关产品推荐

