我们在前面涉及到了 Temporal
,TemporalAccessor
,TemporalUnit
,TemporalField
,TemporalAmount
和 TemporalAdjuster
,这些全部都是接口,除了 Temporal
其它都是顶级接口。
Temporal 和 TemporalAccessor
我们首先了解一下 Temporal
和 TemporalAccessor
这两个接口的层次结构:
不难发现,我们经常使用的那些日期时间相关的对象都继承了 Temporal
,而 Temporal
接口又继承自TemporalAccessor
接口。
我们使用的时候接触到TemporalAccessor
接口的地方是静态工厂方法from(TemporalAccessor temporal)
,现在我们可以很清楚的了解到 from
其实就是根据我们传入的时间日期对象来构造我们想要创建的时间日期对象。
而我们使用的时候在Duration
和 Period
接触的比较多,其用进行通用声明,例如 between
,addTo
和subtractFrom
方法。其次就是在实现了 TemporalAdjuster
接口的类中出现了。
TemporalAdjuster
TemporalAdjuster
接口就是一个函数式接口,其只定义了一个方法:
- Temporal
adjustInto
(Temporal temporal):调整指定的 temporal 对象。
有一个很有趣的现象,就是上图中继承了 Temporal
和 TemporalAccessor
这两个接口的对象除了 ZonedDateTime
类其它都继承并实现了 TemporalAdjuster
接口,其实现基本上都是将传入的 Temporal
和 TemporalAccessor
的实例对象中的信息按照当前实例信息进行修改后返回相应的副本,通俗点理解就是将当前实例的信息写入到参数实例中并返回一个全新的实例。
LocalDateTime nowDateTime=LocalDateTime.now(); // 2019-08-09T17:15:48.582
LocalDate dateY=LocalDate.of(2089, 12, 12); // 2089-12-12
dateY.adjustInto(nowDateTime); // 2089-12-12T17:15:48.582
nowDateTime.adjustInto(dateY)<