Java8时间api如何选择DST更改期间的偏移量

Java8时间api如何选择DST更改期间的偏移量,java,java-time,Java,Java Time,在Java8TimeAPI中,您可以创建一个LocalDateTime,它位于秋季(中欧时间)DST时间变化期间的时间重叠中 您可以使用ZoneId将其转换为ZoneDateTime,它表示精确的时间点 这样做实际上并不能解决歧义-仍然可能有两个时刻对应于此LocalDateTime和此区域(但偏移量不同) 时间API如何以及为什么选择夏季补偿 @Test public void TimeSetOnDST() throws Exception { LocalDateTime time =

在Java8TimeAPI中,您可以创建一个LocalDateTime,它位于秋季(中欧时间)DST时间变化期间的时间重叠中

您可以使用ZoneId将其转换为ZoneDateTime,它表示精确的时间点

这样做实际上并不能解决歧义-仍然可能有两个时刻对应于此LocalDateTime和此区域(但偏移量不同)

时间API如何以及为什么选择夏季补偿

@Test
public void TimeSetOnDST() throws Exception {
    LocalDateTime time = LocalDateTime.of(2016, 10, 30, 2, 30); // in the DST time overlap
    ZonedDateTime of = ZonedDateTime.of(time, ZoneId.of("Europe/Zurich"));
    System.out.println(of); // 2016-10-30T02:30+02:00[Europe/Zurich]
    // But why not 2016-10-30T02:30+01:00[Europe/Zurich] ?
    // Is this just "by convention"?
}

在以下文件中有详细记录:

在大多数情况下,本地日期时间只有一个有效偏移量。在重叠的情况下,当时钟设置回原位时,有两个有效偏移。此方法使用通常与“summer”对应的较早偏移


如@JodaStephen的评论所述,如果您想选择其他可用的偏移量,可以使用。

谢谢。我想这只是惯例。如果你想改变惯例,只需使用。(选择约定是因为它比大多数用例中的异常或附加参数更好。)我觉得选择约定是明智的
LocalDateTime
doc说这是一个“挂钟”,惯例遵循我们在DST轮班后第二天早上醒来时的假设:)我也很欣赏已经过度设计的时间/日期支持的持续重新设计。至少与其他语言的SDK相比,它们通常只需要包装POSIX时间API就可以完成。