Java 8 的 java.time API 提供 Year.isLeap() 判断闰年、LocalDate.lengthOfMonth() 获取当月天数、Month.length() 获取某月理论天数,语义清晰且线程安全,优于旧 API。

Java 8 引入的 java.time API(如 LocalDate、Year、Month)已内置闰年判断和月份天数计算能力,无需手动实现复杂逻辑。
用 Year.isLeap() 判断闰年
Year 类提供静态方法直接判断某年是否为闰年,符合公历规则(能被4整除但不能被100整除,或能被400整除):
-
Year.isLeap(2000)→ true(能被400整除) -
Year.isLeap(1900)→ false(能被100整除但不能被400整除) -
Year.isLeap(2024)→ true(能被4整除且不能被100整除) - 也可从日期对象提取年份:
LocalDate.now().getYear()再传入Year.isLeap(...)
用 LocalDate.lengthOfMonth() 获取当月天数
LocalDate 实例可直接返回当前日期所在月份的实际天数,自动处理大小月和闰年二月:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
LocalDate.of(2024, 2, 15).lengthOfMonth()→ 29(2024是闰年) -
LocalDate.of(2023, 2, 10).lengthOfMonth()→ 28(2023平年) -
LocalDate.of(2023, 4, 1).lengthOfMonth()→ 30(四月固定30天)
用 Month.length() 获取某月理论天数(需指定是否闰年)
Month 枚举的 length() 方法接受一个 boolean 参数,用于明确是否按闰年计算二月:
立即学习“Java免费学习笔记(深入)”;
-
Month.FEBRUARY.length(true)→ 29 -
Month.FEBRUARY.length(false)→ 28 -
Month.JANUARY.length(true)或Month.JANUARY.length(false)→ 都是 31(非二月不受闰年影响)
不推荐:手动计算或使用旧 API
Calendar 和 Date 等旧类不仅线程不安全,而且判断闰年或获取天数需额外步骤(如设置年份+月份再调用 getActualMaximum()),易出错且可读性差。现代 Java 应优先使用 java.time 中语义清晰、不可变、线程安全的类型。

















