java时区名称';夏季&x27;应该是';日光';
在澳大利亚,新南威尔士州和昆士兰州位于同一经度。然而在夏天,一个遵守夏令时,另一个不遵守 因此,一年中有一半的时间他们相隔1小时java时区名称';夏季&x27;应该是';日光';,java,datetime,timezone,Java,Datetime,Timezone,在澳大利亚,新南威尔士州和昆士兰州位于同一经度。然而在夏天,一个遵守夏令时,另一个不遵守 因此,一年中有一半的时间他们相隔1小时 昆士兰州全年和新南威尔士州冬季在时区(AEST)内,GMT+10 新南威尔士州夏季 时区被称为(AEDT)和 格林尼治时间是11点 然而,根据爪哇AEST=EST(东部标准时间)和AEDT=EST(东部夏季时间) 因此,如果不打印完整时区名称,使用SimpleDataFormat无法区分它们: // printing the same date with diff
- 昆士兰州全年和新南威尔士州冬季在时区(AEST)内,GMT+10
- 新南威尔士州夏季 时区被称为(AEDT)和 格林尼治时间是11点
// printing the same date with different timezones
// using new SimpleDateFormat("dd/MM/yyyy HH:mm z")
26/12/2014 06:00 EST
26/12/2014 07:00 EST
// cannot tell the difference ^
// using new SimpleDateFormat("dd/MM/yyyy HH:mm z X zzzz")
26/12/2014 06:00 EST +10 Eastern Standard Time (Queensland)
26/12/2014 07:00 EST +11 Eastern Summer Time (New South Wales)
这是java中的一个bug吗?SimpleDataFormat或时区可以修补吗?在
公共静态时区getTimeZone(字符串ID)
的Javadoc中,我们读到
ID—时区的ID,可以是缩写,如“PST”,全名,如“America/Los_Angeles”,也可以是自定义ID,如“GMT-8:00”请注意,缩写的支持仅用于JDK 1.1.x兼容性,应使用全名。
我们可以使用TimeZone.getAvailableIDs()
如果我们对时区使用全名,我们会发现夏令时是正确的
Date now = new Date();
TimeZone timeZoneQLD = TimeZone.getTimeZone("Australia/Queensland");
TimeZone timeZoneNSW = TimeZone.getTimeZone("Australia/NSW");
DateFormat formatQLD = new SimpleDateFormat("dd/MM/yyyy HH:mm Z");
DateFormat formatNSW = new SimpleDateFormat("dd/MM/yyyy HH:mm Z");
formatQLD.setTimeZone(timeZoneQLD);
formatNSW.setTimeZone(timeZoneNSW);
System.out.println("Queensland");
System.out.println(formatQLD.format(now));
System.out.println("DST saving " + timeZoneQLD.useDaylightTime());
System.out.println();
System.out.println("New South Wales");
System.out.println(formatNSW.format(now));
System.out.println("DST saving " + timeZoneNSW.useDaylightTime());
输出:
Queensland
11/03/2015 03:06 +1000
DST saving false
New South Wales
11/03/2015 04:06 +1100
DST saving true
关键是时区缩写不明确。EST=东部夏季时间和东部标准时间。这有一个java错误和解决方案——它只是没有生成最新版本。@pstanton这就是为什么文档说只能使用全名。
Queensland
11/03/2015 03:06 +1000
DST saving false
New South Wales
11/03/2015 04:06 +1100
DST saving true