5

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 version 1.4.9-b01 JRE时区数据版本:tzdata2014i 嵌入式时区数据版本:tzdata2014i

提前感谢您的帮助。

问候, 本尼

4

1 回答 1

1

你的问题自己回答。从 tzdata2014f 开始A包括:

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

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

您说您正在使用 tzdata2014i,它位于 tzdata2014f 之后。那么你为什么对不再看到感到困惑EST呢?

时区名称

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

而是使用.格式的正确 IANA 时区名称continent/region。例如,Australia/Sydney

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

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

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

仅供参考,维基百科有一个关于澳大利亚时间的页面。

于 2016-09-29T22:44:04.823 回答