Java 8中澳大利亚/墨尔本时区的日期时间日光节约时间问题

关于夏令时的开始和结束,我得到了不同的结果。

ZoneId zone = ZoneId.of("Australia/Melbourne");
System.out.println(ZonedDateTime.of(2019,04,07,3,zone)); // statement-1
System.out.println(ZonedDateTime.of(2019,10,06,2,zone)); // statement-2

对于2019年上半年的日光节约时间,我得到的结果为(2019-04-07T03:00 ** + 10:00 ** [澳大利亚/墨尔本])。 Java将减少1小时的偏移值。但是对于日光节约的后半部分(statement-2 => 2019-10-06T 03:00 + 11:00 [澳大利亚/墨尔本]),java将时间增加了1小时,而+1抵消价值。

根据我的理解,java应该将时间增加1小时,并将偏移值+1(DST结束),而在DST开始时,java应该从时间减少1小时,将偏移值减少1。

请帮助我澄清差异。是Java 8问题,还是我的理解不正确?

libravilla 回答:Java 8中澳大利亚/墨尔本时区的日期时间日光节约时间问题

DST transitions for Australia/Melbourne看,由于夏令时更改,时钟从未在2019-10-06的02:00出现。 DST是这样工作的:在01:59:59.999999之后,时钟跳至03:00:00.000000。

这在ZonedDateTime.of javadoc中有记录:

在间隙的情况下,当时钟向前跳时,没有有效的偏移量。取而代之的是,将本地日期时间调整为晚一些间隔时间。对于典型的一小时夏令时更改,本地日期时间将在一小时后移入通常对应于“夏季”的偏移量中。

本文链接:https://www.f2er.com/2568642.html

大家都在问