为什么 ZonedDateTime class 没有实现 TemporalAdjuster 接口
why ZonedDateTime class does not implement TemporalAdjuster interface
我目前正在学习 java.time API 并且我注意到 class 中的大多数(例如 LocalDate
、OffsetDateTime
)在 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
包括所有可能的日期时间字段,此限制在实践中几乎没有影响。
我目前正在学习 java.time API 并且我注意到 class 中的大多数(例如 LocalDate
、OffsetDateTime
)在 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
包括所有可能的日期时间字段,此限制在实践中几乎没有影响。