java为什么ZoneDateTime类不实现临时调整器接口
我目前正在学习java。time API和我已经注意到java中的大多数类(例如LocalDate
,OffsetDateTime
)。时间实现TemporalAdjuster
接口,但ZonedDateTime
没有。我只是想知道为什么会这样?为什么要将ZonedDateTime
排除在TemporalAdjuster
接口的实现之外
你可以在下面搜索框中键入要查询的问题!
我目前正在学习java。time API和我已经注意到java中的大多数类(例如LocalDate
,OffsetDateTime
)。时间实现TemporalAdjuster
接口,但ZonedDateTime
没有。我只是想知道为什么会这样?为什么要将ZonedDateTime
排除在TemporalAdjuster
接口的实现之外
# 1 楼答案
一个
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)
。也就是说,不可能通过Temporal
接口更改时态类的时区考虑到
ZonedDateTime
包含所有可能的日期时间字段,这种限制在实践中几乎没有效果