有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么ZoneDateTime类不实现临时调整器接口

我目前正在学习java。time API和我已经注意到java中的大多数类(例如LocalDateOffsetDateTime)。时间实现TemporalAdjuster接口,但ZonedDateTime没有。我只是想知道为什么会这样?为什么要将ZonedDateTime排除在TemporalAdjuster接口的实现之外


共 (1) 个答案

  1. # 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包含所有可能的日期时间字段,这种限制在实践中几乎没有效果