这款闰年计算器能做什么
这款闰年计算器可以帮你判断任意年份是否符合公历(全球通用的民用日历,中国也采用公历)中的闰年规则——闰年全年有 366 天,而非 365 天,会在二月多出一个 2 月 29 日。它支持两种模式:查询单个年份,或者扫描整个年份区间,列出并统计区间内的所有闰年。
使用方法
先选择你的计算类型:
单个年份——在年份输入框中填入一个数值(默认值为 2024)。计算器会告诉你该年是否为闰年,以及全年共有多少天(365 或 366)。
年份区间——输入起始年份和结束年份(默认值为 2020–2030)。计算器会列出该区间内的所有闰年,并显示年份总数、闰年数量和平年数量。
计算公式详解
当满足以下条件时,某一年即为闰年:
能被 4 整除,且不能被 100 整除,或者
能被 400 整除。
用公式表示就是:
$$\text{Leap Year} \iff \left(\text{Year} \bmod 4 = 0 \;\wedge\; \text{Year} \bmod 100 \neq 0\right) \;\vee\; \left(\text{Year} \bmod 400 = 0\right)$$
用代码表示就是:(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)。正是"能被 100 整除却不能被 400 整除"这条例外规则,让 1900 年成为平年,而 2000 年却是闰年。对于年份区间,计算器只需将这条规则套用到从起始到结束的每一年,再把符合条件的年份汇总即可:
$$\begin{gathered} \text{Leap Count} = \sum_{y=S}^{E} \big[\,\text{IsLeap}(y)\,\big] \\[1.5em] \text{where}\quad \left\{ \begin{aligned} S &= \text{Start Year} \\ E &= \text{End Year} \\ \text{IsLeap}(y) &\iff (y \bmod 4 = 0 \wedge y \bmod 100 \neq 0) \vee (y \bmod 400 = 0) \end{aligned} \right. \end{gathered}$$
Advertisement
用整除规则判断闰年的决策流程。
实例演示
将计算类型设为年份区间,起始年份 = 2020,结束年份 = 2030。逐年判断后可得:
查找到的闰年:2020、2024、2028
年份总数:\(2030 - 2020 + 1 = 11\)
闰年数量:3
平年数量:\(11 - 3 = 8\)
如果你改为查询单个年份 2024,结果则是"闰年",全年共 366 天。
闰年增加2月29日,使全年达到366天。
闰年参考表:世纪年份和近几十年
该计算器适用于格里历闰年规则,这是现今大多数国家民用日历所使用的规则。一年是闰年,当且仅当它能被4整除,除了世纪年份,必须也能被400整除:
$$\text{闰年} \iff \left(Y \bmod 4 = 0 \;\wedge\; Y \bmod 100 \neq 0\right) \;\vee\; \left(Y \bmod 400 = 0\right)$$
请注意,其他日历系统(例如希伯来日历、伊斯兰日历、埃塞俄比亚日历和伊朗日历)使用完全不同的闰日插入规则,而较早的儒略历则将每个第4年作为闰年,不设世纪例外——因此下列数值仅适用于格里历(或前推格里历)日历。
表1——世纪年份:容易被人们忽视的例外
年份
÷ 4?
÷ 100?
÷ 400?
是闰年?
年份天数
1600
是
是
是
是
366
1700
是
是
否
否
365
1800
是
是
否
否
365
1900
是
是
否
否
365
2000
是
是
是
是
366
2100
是
是
否
否
365
2200
是
是
否
否
365
2300
是
是
否
否
365
2400
是
是
是
是
366
在4个世纪年份中,只有1个是闰年。因为1900年被跳过,而2000年没有被跳过,在20世纪编写的使用简单"能被4整除"测试的软件碰巧对2000年是正确的——但对2100年又错了。
表2——2000年至2100年的所有闰年
年份
÷ 4?
÷ 100?
÷ 400?
是闰年?
年份天数
2000
是
是
是
是
366
2004
是
否
否
是
366
2008
是
否
否
是
366
2012
是
否
否
是
366
2016
是
否
否
是
366
2020
是
否
否
是
366
2024
是
否
否
是
366
2028
是
否
否
是
366
2032
是
否
否
是
366
2036
是
否
否
是
366
2040
是
否
否
是
366
2044
是
否
否
是
366
2048
是
否
否
是
366
2052
是
否
否
是
366
2056
是
否
否
是
366
2060
是
否
否
是
366
2064
是
否
否
是
366
2068
是
否
否
是
366
2072
是
否
否
是
366
2076
是
否
否
是
366
2080
是
否
否
是
366
2084
是
否
否
是
366
2088
是
否
否
是
366
2092
是
否
否
是
366
2096
是
否
否
是
366
即在2000–2100年间(含端点)共有25个闰年。2100年被跳过(能被4和100整除,但不能被400整除),所以2096年之后的下一个闰年是2104年——间隔8年,而不是通常的4年。1896年至1904年之间也出现过同样的8年间隔,并将在2196年至2204年之间再次出现。任何安排四年一次活动、分摊日数惯例或测试日期代码的人都应该将2096→2104视为边界情况。
Advertisement
关键术语解释
闰年
包含一个额外日期的日历年——366天而不是365天——插入以使日历与地球绕太阳公转保持一致。
平年
一个普通的365天年份,没有额外的日期;2月有28天。
2月29日(闰日)
添加到格里历闰年的额外日期。"闰日"简单来说是指插入日历的日期;在这一日期出生的人通常被称为闰日生人。
格里历
1582年教宗格里高利十三世在教宗诏书Inter gravissimas中颁布的日历,它为闰年规则添加了世纪例外。采纳不是同时进行的——天主教国家在1582年改变,英国及其殖民地在1752年改变,而一些国家仅在20世纪改变。
儒略历
较早的罗马日历,其中每第4年是闰年,不设世纪例外,平均年长为365.25天。相对于季节,它大约每128年漂移1天,这就是格里历改革所纠正的内容。
前推格里历
格里历规则向后延伸到其存在之前的日期(1582年之前,或给定国家采纳之前)。历史学家通常引用原始儒略历日期,所以早期年份的"闰年"答案是数学延伸,不是历史事实。
平回归年
从一个春分到下一个春分的平均时间,约365.2422天。这是日历试图追踪的天文量。
平均格里历年
格里历规则下一年的平均长度——每400年中有97个闰年:$$365 + \frac{1}{4} - \frac{1}{100} + \frac{1}{400} = 365.2425\ \text{天}$$它与平回归年的差异大约为每年0.0003天,即大约每3,000年相差1天。
闰秒
偶尔添加到UTC的一秒钟调整,以使时钟时间保持与地球不规则自转接近。闰秒由IERS决定,与闰年无关——它们不遵循固定的规则,不能从年份数字预测。
模运算和可除性
模运算\(Y \bmod n\)给出将\(Y\)除以\(n\)后的余数;余数为0表示\(Y\)能被\(n\)整除。例如\(2024 \bmod 4 = 0\)和\(2024 \bmod 100 = 24\),所以2024通过了能被4整除的测试,不是世纪年份——因此是闰年。
常见问题
2100 年明明能被 4 整除,为什么不是闰年? 因为它同时能被 100 整除却不能被 400 整除,正好触发了例外规则而被排除。1700 年、1800 年和 1900 年同理。
2000 年真的是闰年吗? 是的。2000 能被 400 整除,满足规则的第二个条件,因此保留了 2 月 29 日。
这个计算器适用于 1582 年之前的年份吗? 计算器会对你输入的任何年份套用公历规则,包括向前"外推(proleptic)"的延伸。从历史上看,公历自 1582 年才开始施行,因此更早的日期可能与此前的儒略历不同——儒略历每四年就设一个闰年,并没有 100/400 的例外规则。