TemporalAdjusters工具类有很多预定义的static方法返回TemporalAdjuster对象,使用不同方式调节Temporal对象而与Temporal实现无关。
TemporalAdjuster的常用方法
-
-
修饰符和返回值 方法名以及描述 static TemporalAdjuster
dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek)
某月的第几个星期几,例如,三月中第二个星期二。static TemporalAdjuster
firstDayOfMonth()
某月的第几个星期几,例如,三月中第二个星期二。static TemporalAdjuster
firstDayOfNextMonth()
下一个月的第一天。static TemporalAdjuster
firstDayOfNextYear()
返回“明年的第一天”调整器。static TemporalAdjuster
firstDayOfYear()
返回“当年的第一天”调整器。static TemporalAdjuster
firstInMonth(DayOfWeek dayOfWeek)
返回“某月的第一个星期几”调整器。static TemporalAdjuster
lastDayOfMonth()
返回“当前月份的最后一天”调整器。static TemporalAdjuster
lastDayOfYear()
返回“当前年份的最后一天”调整器。static TemporalAdjuster
lastInMonth(DayOfWeek dayOfWeek)
返回“某月的最后一个星期几”的调整器。static TemporalAdjuster
next(DayOfWeek dayOfWeek)
(往后不包括当天)下一个星期几是几月几号。若当前为周三,那么next(DayOfWeek.WEDNESDAY)指下一个周三即下周三;next(DayOfWeek.SUNDAY) 指下一个周日即本周日(此时并不是下周日)。static TemporalAdjuster
nextOrSame(DayOfWeek dayOfWeek)
(往后包括当天)最近星期几的日期。如最近星期五的日期,如果今天是星期五,则返回今天日期,如果今天不是星期五,则返回下周五的日期。static TemporalAdjuster
ofDateAdjuster(UnaryOperator<LocalDate> dateBasedAdjuster)
自定义日期调整器的TemporalAdjuster
。static TemporalAdjuster
previous(DayOfWeek dayOfWeek)
(往前不包括当天)上一个星期几是几月几号。若当前为周三,那么previous(DayOfWeek.WEDNESDAY)指上一个周三即上周三;previous(DayOfWeek.TUESDAY) 指上一个周二即昨天(此时并不是上周二)。static TemporalAdjuster
previousOrSame(DayOfWeek dayOfWeek)
(往前包括当天)最近星期几的日期。如最近星期五的日期,如果今天是星期五,则返回今天日期,如果今天不是星期五,则返回上周五的日期。
-
案例:
LocalDateTime now = LocalDateTime.now();
System.out.println("当前时间:" + now + "======>" + now.getDayOfWeek());
System.out.println("下一个周一:" + now.with(TemporalAdjusters.next(DayOfWeek.MONDAY)));
System.out.println("上一个周一:" + now.with(TemporalAdjusters.previous(DayOfWeek.MONDAY)));
System.out.println("下一个周五:" + now.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY)));
System.out.println("上一个周五:" + now.with(TemporalAdjusters.previousOrSame(DayOfWeek.FRIDAY)));
System.out.println("本月最后一个周五:" + now.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY)));
System.out.println("本月第一个周五:" + now.with(TemporalAdjusters.firstInMonth(DayOfWeek.FRIDAY)));
System.out.println("本月第一天:" + now.with(TemporalAdjusters.firstDayOfMonth()));
System.out.println("本月最后一天:" + now.with(TemporalAdjusters.lastDayOfMonth()));
System.out.println("下月的第一天:" + now.with(TemporalAdjusters.firstDayOfNextMonth()));
System.out.println("今年的第一天:" + now.with(TemporalAdjusters.firstDayOfYear()));
System.out.println("今年的最后一天:" + now.with(TemporalAdjusters.lastDayOfYear()));
System.out.println("下一年的第一天:" + now.with(TemporalAdjusters.firstDayOfNextYear()));
System.out.println("本月的第二个周五:" + now.with(TemporalAdjusters.dayOfWeekInMonth(2,DayOfWeek.FRIDAY)));
System.out.println("两周后:" + now.with(TemporalAdjusters.ofDateAdjuster(date -> date.plusWeeks(2))));
/*打印结果:
当前时间:2020-04-03T11:32:59.871======>FRIDAY
下一个周一:2020-04-06T11:32:59.871
上一个周一:2020-03-30T11:32:59.871
下一个周五:2020-04-03T11:32:59.871
上一个周五:2020-04-03T11:32:59.871
本月最后一个周五:2020-04-24T11:32:59.871
本月第一个周五:2020-04-03T11:32:59.871
本月第一天:2020-04-01T11:32:59.871
本月最后一天:2020-04-30T11:32:59.871
下月的第一天:2020-05-01T11:32:59.871
今年的第一天:2020-01-01T11:32:59.871
今年的最后一天:2020-12-31T11:32:59.871
下一年的第一天:2021-01-01T11:32:59.871
本月的第二个周五:2020-04-10T11:32:59.871
两周后:2020-04-17T11:32:59.871
*/