与ZoneId的偏移量错误?

时间:2019-10-03 18:36:27

标签: java timezone

ZoneId.of("Australia/ACT").getRules().getOffset(LocalDateTime.of(2019, 03, 31, 13, 0, 0, 0))

返回

+11:00

根据timeanddate

,其中哪个似乎不正确

我希望补偿+10:30。

1 个答案:

答案 0 :(得分:3)

Australia/ACTIANA database (tzdata)中不推荐使用的旧名称,不引用Australian Central Time。相反,它指向Australian Capital Territory,与Sydney在同一时区。

尝试Australia/AdelaideAustralia/Broken_Hill来参考Australian Central Time的时区。

示例代码。

LocalDateTime ldt = LocalDateTime.of ( 2019 , 03 , 31 , 13 , 0 , 0 , 0 );
System.out.println ( "Offsets for: " + ldt );

List < ZoneId > zones = 
        List.of ( 
            ZoneId.of ( "Australia/Adelaide" ) , 
            ZoneId.of ( "Australia/Broken_Hill" ) 
        )
;
for ( ZoneId zone : zones )
{
    ZoneOffset offset = zone.getRules ().getOffset ( ldt );
    System.out.println ( "zone: " + zone.toString () + " has offset: " + offset.toString () );
}

在Java 13中运行(来自AdoptOpenJDK):

  

2019年3月31日13:00的偏移量

     

区域:澳大利亚/阿德莱德的偏移量:+10:30

     

区域:Australia / Broken_Hill具有偏移量:+10:30

提示:有关实时区域的完整列表,请查阅tzdata的新副本。尽管列表可能已过时,但更方便地咨询Wikipedia for a list of time zones