• Java日期类TemporalAdjuster使用说明


    Java日期类TemporalAdjuster使用说明

    java 8 引入了新的日期、时间库————即java.time包,TemporalAdjuster 类是其中之一。
    简而言之,TemporalAdjuster 类是调整Temporal对象的策略。在使用TemporalAdjuster 类之前,我们先看看Temporal接口。

    Temporal 接口
    Temporal可以根据实际需求表示为日期、时间或两者组合。其几个实现类包括:
    LocalDate – 表示没有时区的日期
    LocalDateTime – 表示没有时区的日期和时间

    TemporalAdjuster 接口
    TemporalAdjuster 是函数接口,在TemporalAdjusters 类中有很多预定义的实现。TemporalAdjuster仅有一个带Temporal对象参数的抽象方法adjustInto()。

    TemporalAdjuster可以执行复杂的日期操作,例如,可以获得下一个星期日对于日期、当月的最后一天、下一年的第一天。当然也可以通过旧的java.util.Calendar api实现。不同的是,新api使用预定义的实现抽象出底层逻辑。

    TemporalAdjusters类也有很多获取日期的方法,看代码:

    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)    
    返回下一个星期几调整器,它将日期调整为调整日期后指定星期几的第一次出现。
    static TemporalAdjuster    nextOrSame​(DayOfWeek dayOfWeek)    
    返回下一个或相同的星期几调整器,它将日期调整为调整日期后指定星期几的第一次出现,除非它已经在那一天,在这种情况下返回相同的对象。
    static TemporalAdjuster    ofDateAdjuster​(UnaryOperator dateBasedAdjuster)    
    获得包裹日期调整器的 TemporalAdjuster 。
    static TemporalAdjuster    previous​(DayOfWeek dayOfWeek)    
    返回上一周的调整程序,该调整程序将日期调整为调整日期之前指定的星期几的第一次出现。
    static TemporalAdjuster    previousOrSame​(DayOfWeek dayOfWeek)    
    返回上一个或同一个星期几的调整器,它将日期调整为调整日期之前指定的星期几的第一次出现,除非它已经在那一天,在这种情况下返回相同的对象。


    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

  • 相关阅读:
    【matlab 代码的python复现】 Matlab实现的滤波器设计实现与Python 的库函数相同实现Scipy
    Linux开发工具
    华仔推荐书单
    零基础学习C语言,怎么入门?
    IDEA为什么不能搜索到jar里的代码?
    centos8 编译安装 httpd-2.4
    Spring Boot 2.x基础教程
    虚拟偶像的歌声原来是这样生成的!
    Spring基础(七):使用外部属性配置文件
    EF Core学习笔记:额外的外键属性 / 单项导航属性
  • 原文地址:https://blog.csdn.net/Kwoky/article/details/127559465