gpt4 book ai didi

java - 为什么 ZonedDateTime 类没有实现 TemporalAdjuster 接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:24:43 25 4
gpt4 key购买 nike

我目前正在研究 java.time API,我注意到 java.time 中的大部分类(例如 LocalDateOffsetDateTime)都实现了 TemporalAdjuster 接口(interface),但 ZonedDateTime 没有。我只是想知道为什么会这样?为什么要排除 ZonedDateTime 实现 TemporalAdjuster 接口(interface)?

最佳答案

TemporalAdjuster 通过 TemporalAdjuster.adjustInto(Temporal) 方法更改另一个时间对象。 Temporal 接口(interface)允许通过 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 接口(interface)更改时间类的时区。

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

关于java - 为什么 ZonedDateTime 类没有实现 TemporalAdjuster 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42823711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com