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
提前感谢您的帮助。
此致 尼
答案 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的页面。