TemporalAdjuster类是一个函数式接口,只提供了一个方法:
Temporal adjustInto(Temporal temporal);
这个接口被众多类实现:
因为这些日期类,都涉及到时间的调整,所以各自都实现了对应的方法。
例如LocalDate中的adjustInto方法,在之前的文章已经演示过用法了,这里还要再讲一个用法,就是TemporalAdjuster对应的工具类:TemporalAdjusters。TemporalAdjusters类和集合类对应的工具类Collections一样,定义了众多现成的方法,让我们使用。
TemporalAdjusters类也有很多获取日期的方法,看代码:
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
/**
* @Auther: www.itzhimei.com
* @Description: 调节器类
*/
public class TemporalAdjusterTest {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
//获取当月第一天
System.out.println("当月第一天:"+now.with(TemporalAdjusters.firstDayOfMonth()));
//获取下月第一天
System.out.println("下月第一天:"+now.with(TemporalAdjusters.firstDayOfNextMonth()));
//获取明年第一天
System.out.println("明年第一天:"+now.with(TemporalAdjusters.firstDayOfNextYear()));
//获取本年第一天
System.out.println("本年第一天:"+now.with(TemporalAdjusters.firstDayOfYear()));
//获取当月最后一天
System.out.println("当月最后一天:"+now.with(TemporalAdjusters.lastDayOfMonth()));
//获取本年最后一天
System.out.println("本年最后一天:"+now.with(TemporalAdjusters.lastDayOfYear()));
//获取当月第三周星期五
System.out.println("当月第三周星期五:"+now.with(TemporalAdjusters.dayOfWeekInMonth(3, DayOfWeek.FRIDAY)));
//获取上周一
System.out.println("上周一:"+now.with(TemporalAdjusters.previous(DayOfWeek.MONDAY)));
//获取下周日
System.out.println("下周日:"+now.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)));
}
}
输出:
当月第一天:2021-06-01T14:48:02.099
下月第一天:2021-07-01T14:48:02.099
明年第一天:2022-01-01T14:48:02.099
本年第一天:2021-01-01T14:48:02.099
当月最后一天:2021-06-30T14:48:02.099
本年最后一天:2021-12-31T14:48:02.099
当月第三周星期五:2021-06-18T14:48:02.099
上周一:2021-06-07T14:48:02.099
下周日:2021-06-20T14:48:02.099