Java8 java.time包下的日期类TemporalAdjuster使用说明

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