1. 概述

在本教程中,我们将介绍几种在 Java 中判断某一年是否为闰年Leap Year)的方法。

闰年的规则

  • 能被 4 整除的年份通常是闰年;
  • 但能被 100 整除而不能被 400 整除的年份不是闰年;
  • 能被 400 整除的年份仍然是闰年。

举个例子:

  • ✅ 2000 年是闰年(能被 400 整除)
  • ❌ 1900 年不是闰年(能被 100 整除但不能被 400 整除)
  • ✅ 2024 年是闰年(能被 4 整除)

2. 使用 Java 8 之前的日历 API

从 Java 1.1 开始,GregorianCalendar 类就提供了判断闰年的方法:

public boolean isLeapYear(int year);

这个方法会返回 true 表示是闰年,否则为 false

⚠️ 注意:如果是公元前的年份(BC),需要传入负数。例如,公元前 3 年应该传入 -2(因为计算方式是 1 - year)。

3. 使用 Java 8+ 的日期时间 API

Java 8 引入了全新的 java.time 包,提供了更现代化的日期时间处理方式。

其中 Year 类提供了两个方法来判断闰年:

静态方法:

public static boolean isLeap(long year);

实例方法:

public boolean isLeap();

示例代码:

import java.time.Year;

boolean isLeap = Year.isLeap(2024); // true

相比旧的 GregorianCalendar,这种方式更加直观简洁。

4. 使用 Joda-Time 库

Joda-Time 是 Java 8 之前非常流行的第三方日期时间库。虽然 Java 8 之后官方推荐使用 java.time,但 Joda-Time 仍然被一些老项目使用。

Joda-Time 并没有直接提供判断闰年的方法,但我们可以通过 LocalDateDays 类来间接判断:

LocalDate localDate = new LocalDate(2020, 1, 31);
int numberOfDays = Days.daysBetween(localDate, localDate.plusYears(1)).getDays();

boolean isLeapYear = (numberOfDays > 365);

如果一年之间的天数大于 365,则说明是闰年。

📌 踩坑提示:虽然 Joda-Time 功能强大,但在新项目中建议优先使用 java.time 包。

5. 总结

在这篇文章中,我们回顾了闰年的判断规则,并演示了三种在 Java 中判断闰年的方法:

  • 使用 GregorianCalendar
  • 使用 java.time.Year
  • 使用 Joda-Time(间接方式)

推荐使用 Java 8+ 的 java.time.Year.isLeap() 方法,简洁高效,语义清晰。

如需查看完整代码示例,可以访问 GitHub 项目地址


原始标题:Finding Leap Years in Java