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

Aji*_*das 3 java timezone datetime dst

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

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

对于 2019 年上半年的夏令时,我得到的结果为 (2019-04-07T03:00**+10:00**[Australia/Melbourne])。Java 正在减少 1 小时以抵消价值。但是对于后半天的节电(statement-2=> 2019-10-06T 03:00+11:00 [Australia/Melbourne]),java 将时间增加 1 小时,偏移值增加 +1。

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

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

Jon*_*oni 6

纵观DST转换澳大利亚/墨尔本,时钟是在2019年10月6日02:00从来没有因为DST的变化。这就是 DST 的工作原理:在 01:59:59.999999 之后,时钟跳到 03:00:00.000000。

这记录在ZonedDateTime.of javadoc 中

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