闰年计算器

闰年计算器

这款闰年计算器能做什么

这款闰年计算器可以帮你判断任意年份是否符合公历(全球通用的民用日历,中国也采用公历)中的闰年规则——闰年全年有 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 的例外规则。

相关推荐