新的java时区信息文件不支持AEST / AEDT

时间:2014-12-10 10:40:54

标签: java datetime timezone zoneinfo

http://www.oracle.com/technetwork/java/javase/tzdata-versions-138805.html

在Oracle网站的上述链接中他们说从版本tzdata2014f,Java支持AEST / AEDT而不是澳大利亚时区的EST,但我目前的tzdata2014i版本仍然没有显示EST。我错过了什么或者我需要做什么吗?

这是我使用的小样本程序,

  import java.util.*;

public class TZ {
 public static void main(String[] args) {

 System.out.println(System.getProperty("java.home"));
  for (String id : TimeZone.getAvailableIDs()) {
   if (!id.startsWith("Australia/")) continue;
   TimeZone tz = TimeZone.getTimeZone(id);
   System.out.println(id + ": " + "Daylight: False : " + tz.getDisplayName(false, TimeZone.SHORT) + "/" + " Daylight: True : "+ tz.getDisplayName(true, TimeZone.SHORT));
  }
 }
}

这是我的时区数据文件版本

C:> java -jar tzupdater.jar -V tzupdater版本1.4.9-b01 JRE时区数据版本:tzdata2014i 嵌入式时区数据版本:tzdata2014i

提前感谢您的帮助。

此致 尼

1 个答案:

答案 0 :(得分:0)

你的问题回答了自己。从tzdata2014f 以及开始,将包含A

  

澳大利亚东部时区缩写现在是AEST / AEDT而不是EST,其他澳大利亚地区也是如此。也就是说,对于东部标准和夏令时,缩写是AEST和AEDT而不是前两者的EST;类似地,现在使用ACST / ACDT,ACWST / ACWDT和AWST / AWDT代替前CST,CWST和WST。

     

此更改不会影响UTC偏移,仅影响时区缩写。

你说你正在使用tzdata2014i之后的tzdata2014i。那你为何不再看到EST感到困惑?

时区名称

顺便说一下,你不应该使用这3-4个字母的缩写。它们不是真正的时区,不是标准化的,也不是唯一的(如EST碰撞所见)。

而是以continent/region的格式使用proper IANA time zone names。例如,Australia/Sydney

Instant instant = Instant.now();
ZoneId zoneId = ZoneId.of( "Australia/Sydney" );
ZonedDateTime zdt = instant.atZone( zoneId );
  

instant.toString():2016-09-29T22:42:40.063Z

     

now.toString():2016-09-30T08:42:40.063 + 10:00 [澳大利亚/悉尼]

仅供参考,维基百科有一个关于Time in Australia的页面。