Date-Time API中的基本类使用
Instant类
Instant类对时间轴上的单一瞬时点建模,可以用于记录应用程序中的事件时间戳,在之后学习的类型转换中,均可以使用Instant类作为中间类完成转换.
Duration类
·Duration类表示秒或纳秒时间间隔,适合处理较短的时间,需要更高的精确性.
Period类
Period类表示一段时间的年、月、日.
LocalDate类
LocalDate是一个不可变的日期时间对象,表示日期,通常被视为年月日.
LocalTime类
LocalTime是一个不可变的日期时间对象,代表一个时间,通常被看作是小时-秒,时间表示为纳秒精度.
LocalDateTime类
LocalDateTime是一个不可变的日期时间对象,代表日期时间,通常被视为年-月-日-时-分-秒.
zonedDateTime类
ZonedDateTime是具有时区的日期时间的不可变表示,此类存储所有日期和时间字段,精度为纳秒,时区为区域偏移量,用于处理模糊的本地日期时间。
now方法在日期/时间类的便用
Date-Time API中的所有类均生成不可变实例,它们是线程安全的,并且这些类不提供公共构造函数,也就是说没办法通过new的方式直接创建,需要采用工厂方法加以实例化.
of方法可以根据给定的参数生成对应的日期/时间对象,基本上每个基本类都有of方法用于生成的对应的对象,而且重载形式多变,可以根据不同的参数生成对应的数据.
Month枚举类的使用
java.time包中引入了Month的枚举,Month中包含标准日历中的12个月份的常量(从JANURAY到DECEMEBER)也提供了一些方便的方法供我们使用。
推荐在初始化LocalDate和LocalDateTime对象的时候,月份的参数使用枚举的方式传入,这样更简单易懂而且不易出错,因为如果是老的思维,calendar传入0的话,那么会出现异常.
DECEMBER
根据现有实例创建日期与时间对象
Java8中日期时间相关的API中的所有实例都是不可改变的,一旦创建LocalDate,LocalTime,LocalDateTime就无法修改他们(类似于String),这对于线程安全非常有利.
min方法也一样 底层是将puls方法的参数由正变成负
Localtime的plus
Period
Period实现类帮助添加一段时间后的日期
with方法
调节器TemporalAdjuster与查询TemporalQuery
在上一节学习的with方法中学习了可以通过with方法修改日期时间对象中封装的数据,但是有一些时候可能会做一些复杂的操作,比如说将时间调整到下个周的周日,下一个工作日,或者本月中的某一天,这个时候可以使用调节器TemporalAdjuster来更方便的处理日期.
自定义TemporalAdjuster调节器
通过Java8本身提供的TemporalAdjusters中的方法可以完成一些常用的操作,如果要自定义日期时间的更改逻辑,可以通过实现TemporalAdjuster类接口中的方式来完成.
。创建类实现TemporalAdjuster接口,。实现TemporalAdjuster中的adjustInto方法,传入一个日期时间对象,完成逻辑之后返回日期时间对象.。通过with方法传入自定义调节器对象完成更改.
例:假如员工一个月中领取工资,发薪日是每个月的15号,如果发薪日是周末,则调整为周五.
TemporalQuery的应用
学习的时态类对象(LocalDate,LocalTime)都有一个方法叫做query,可以针对日期进行查询.Rquery(TemporalQuery query)这个方法是一个泛型方法,返回的数据就是传入的泛型类的类型, TemporalQuery是一个泛型接口,里面有一个抽象方法是
RqueryFrom(TemporalAccessor temporal) , TemporalAccessor是Temporal的父接口,实际上也就是LocalDate,LocalDateTime相关类的顶级父接口,这个queryFrom的方法的实现逻辑就是,传入一个日期/时间对象通过自定义逻辑返回数据.