为什么 ZonedDateTime class 没有实现 TemporalAdjuster 接口

why ZonedDateTime class does not implement TemporalAdjuster interface

我目前正在学习 java.time API 并且我注意到 class 中的大多数(例如 LocalDateOffsetDateTime)在 java.time 实现 TemporalAdjuster 接口,但 ZonedDateTime 没有。我只是想知道为什么会这样?为什么要排除 ZonedDateTime 实现 TemporalAdjuster 接口?

A TemporalAdjuster 通过 TemporalAdjuster.adjustInto(Temporal) 方法更改另一个时间对象。 Temporal 界面允许通过 Temporal.with(TemporalField, long).

更改各个字段

LocalDate 可以实现 TemporalAdjuster 因为它的状态完全由时间字段(年、月、日)组成。因此,LocalDate.adjustInto(Temporal)中的实现可以调用Temporal.with(TemporalField, long)传递年月日(它实际上使用ChronoField.EPOCH_DAY,它是年月日的组合)。

OffsetDateTime 可以实现 TemporalAdjuster 因为它的状态也完全由时间字段组成(年、月、日、小时、分钟、秒、纳秒和偏移秒)。因此,OffsetDateTime.adjustInto(Temporal) 中的实现可以调用 Temporal.with(TemporalField, long) 逐个传递字段。

ZonedDateTime 无法实现 TemporalAdjuster,因为它的状态包含一个 ZoneId,它不是时间字段,因此无法传递给 Temporal.with(TemporalField, long)。 IE。无法通过 Temporal 界面更改时间 class 的时区。

鉴于 ZonedDateTime 包括所有可能的日期时间字段,此限制在实践中几乎没有影响。