该表达式用于获取当前日期之后(含当天)最近的周一,基于java 8的java.time api,使用localdate.with(temporaladjusters.nextorsame(dayofweek.monday))实现,返回新实例且不可变。
这个表达式用于获取当前日期之后(含当天)最近的周一,是 java 8 引入的 java.time api 中非常实用的时间调整方式。
理解核心组件
LocalDate 表示不带时区和时间的日期;TemporalAdjusters 是一组预定义的时间调整器;nextOrSame(DayOfWeek.MONDAY) 的含义是:如果今天是周一,就返回今天;否则返回下一个周一。
基本用法示例
直接调用即可获得目标日期:
LocalDate today = LocalDate.now(); LocalDate nextOrThisMonday = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY));
例如:
- 今天是 2024-04-01(周一)→ 返回 2024-04-01
- 今天是 2024-04-03(周三)→ 返回 2024-04-08(下周一)
- 今天是 2024-04-05(周五)→ 返回 2024-04-08(下周一)
常见搭配与注意事项
这个方法只操作日期,不涉及时间或时区,所以无需担心格式化或系统时钟问题。
- 它返回的是新的
LocalDate实例,原对象不变(不可变设计) - 若需“上周一”,可用
TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY) - 若需“严格下周的周一”(跳过今天),用
TemporalAdjusters.next(DayOfWeek.MONDAY) - 配合
DateTimeFormatter可轻松格式化输出,如:nextOrThisMonday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
实际应用场景
适合做周报起始日、周期性任务对齐、日历视图默认选中等逻辑:
- 用户点击“本周”按钮时,自动定位到本周一
- 生成每周统计报表,统一以周一为周期起点
- 安排会议提醒,确保首次提醒落在下一个周一
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











