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 并没有直接提供判断闰年的方法,但我们可以通过 LocalDate
和 Days
类来间接判断:
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 项目地址。