LocalDate.lengthOfYear()直接返回当前日期所在年份的天数(365或366),仅取决于年份是否为闰年,与月日无关;其逻辑等价于isLeapYear()判断,但返回int型天数。

LocalDate.lengthOfYear() 方法直接返回当前日期所在年份的总天数,无需额外参数,结果是 365 或 366(闰年)。
lengthOfYear() 的基本用法
该方法属于 LocalDate 实例方法,调用时基于该日期所在的年份计算全年天数,与具体是哪一天无关。例如:
-
LocalDate.of(2023, 1, 1).lengthOfYear()→ 返回 365 -
LocalDate.of(2024, 12, 31).lengthOfYear()→ 返回 366(2024 是闰年) -
LocalDate.now().lengthOfYear()→ 返回当前系统年份的天数
和 isLeapYear() 的关系
lengthOfYear() 的底层逻辑等价于:
→ 如果 isLeapYear() == true,则返回 366;否则返回 365。
所以它和 LocalDate.isLeapYear() 完全一致,只是返回值类型不同(一个是 int,一个是 boolean)。
如果你只需要判断是否闰年,用 isLeapYear() 更语义清晰;如果明确需要“天数”这个数值,就用 lengthOfYear()。
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
注意:不依赖当前日期的具体值
无论 LocalDate 实例是 1 月 1 日还是 12 月 31 日,只要年份相同,lengthOfYear() 结果就一样。它只看年份字段,不关心月、日。
-
LocalDate.parse("2000-02-29").lengthOfYear()→ 366(2000 年是闰年) -
LocalDate.parse("1900-01-01").lengthOfYear()→ 365(1900 年不是闰年,整百年需被 400 整除)
替代写法(不推荐)
虽然可以用 Year.of(year).length() 或 ChronoUnit.DAYS.between(start, end) 手动算,但没必要。前者稍绕,后者易出错且性能差。原生的 lengthOfYear() 简洁、准确、高效。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










