直接调用LocalDate.now().with(TemporalAdjusters.lastDayOfYear())即可获取当前年份12月31日;该调整器基于输入日期年份固定返回同年的12月31日,不依赖系统时间、不跨年、自动处理闰年。

直接调用 LocalDate.now().with(TemporalAdjusters.lastDayOfYear()) 即可获取当前年份的最后一天(12月31日)。
理解 TemporalAdjusters.lastDayOfYear() 的作用
这是一个预定义的时间调整器,它不改变年份,只把给定的 LocalDate 调整为**同一年的 12 月 31 日**。它不依赖当前系统时间,而是基于输入日期所在的年份计算。
- 如果输入是
LocalDate.of(2022, 5, 15),结果是2022-12-31 - 如果输入是
LocalDate.of(2025, 1, 1),结果是2025-12-31 - 它不会“跳到明年”,也不会受月份/日期影响——只取年份,固定返回该年12月31日
常用写法示例
多数场景下你只需要一行代码:
LocalDate endOfYear = LocalDate.now().with(TemporalAdjusters.lastDayOfYear());
若想指定某一年(比如 2027 年),可先构造该年任意一天,再调整:
立即学习“Java免费学习笔记(深入)”;
LocalDate endOf2027 = LocalDate.of(2027, 1, 1).with(TemporalAdjusters.lastDayOfYear()); // 2027-12-31
也可配合其他日期操作,例如获取上一年末:
LocalDate lastYearEnd = LocalDate.now().minusYears(1).with(TemporalAdjusters.lastDayOfYear());
注意事项与常见误区
这个方法返回的是不可变的 LocalDate,原对象不会被修改。
- 确保已导入:
import java.time.LocalDate;和import java.time.temporal.TemporalAdjusters; - 不要误用
TemporalAdjusters.lastDayOfMonth()——它返回的是当月最后一天(如 3月31日、2月28/29日) - 不需要手动判断闰年或计算天数,
lastDayOfYear()内部已自动处理
替代写法(不推荐但可行)
虽然不如 adjuster 简洁,但也能达到相同效果:
int year = LocalDate.now().getYear(); LocalDate endOfYear = LocalDate.of(year, 12, 31);
这种方式更直白,但缺乏 adjuster 的语义表达力和可组合性(比如链式调用中嵌入调整逻辑)。


















