直接调用localdate.now().with(temporaladjusters.lastdayofmonth())可获取当前月最后一天;对指定月份任意日期同样适用,推荐显式构造基准日期以提升可测试性,避免使用plusmonths等绕路写法。

直接调用 LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()) 就能获取当前月的最后一天。
获取当月最后一天(基于当前日期)
这是最常用的方式,适用于需要处理“今天所在月份”的场景:
LocalDate today = LocalDate.now();LocalDate lastDay = today.with(TemporalAdjusters.lastDayOfMonth());
例如:如果今天是 2024-03-15,结果就是 2024-03-31;如果是 2024-02-10,结果就是 2024-02-29(闰年)。
获取指定月份的最后一天
如果你已有某个月份的任意一天(比如 2023-07-01 或 2023-07-20),同样用 with 即可:
Java Linux版下载入口,提供 Oracle JDK 26.0.2 官方 Linux 安装包、Java 环境配置、JDBC 数据库连接和 Java 服务端开发相关信息。
LocalDate anyDayInJuly = LocalDate.of(2023, 7, 10);LocalDate julyEnd = anyDayInJuly.with(TemporalAdjusters.lastDayOfMonth()); // → 2023-07-31
注意:只要日期落在目标月份内,结果就一定是该月最后一天,与具体哪天无关。
不依赖当前日期的写法(更清晰、可测试)
避免隐式依赖系统时间,推荐显式构造基准日期:
LocalDate base = LocalDate.of(2025, 4, 1); // 用月初或月中都行LocalDate endOfMonth = base.with(TemporalAdjusters.lastDayOfMonth()); // → 2025-04-30
这种写法逻辑明确,单元测试时也容易控制输入。
常见误区提醒
别用 plusMonths(1).withDayOfMonth(1).minusDays(1) 这种绕路写法——虽然结果正确,但可读性差、易出错(比如跨年、二月边界),且性能略低。Java 8+ 提供的 TemporalAdjusters.lastDayOfMonth() 就是为此设计的标准解法。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










