Pra*_*san 4 java timezone jodatime java-8 java-time
我正在使用Java 8,
在我们的代码的早期,sdf.setTimeZone(TimeZone.getTimeZone("PDT"));由于PDT不是有效的ZoneId ,我们曾 用来转换到失败的美国太平洋地区(未引发任何错误,而是转换为默认时区)。
因此,我寻找值中setTimeZone(TimeZone.getTimeZone("PST"));也不可用的那个TimeZone.getAvailableIDs()。
最后我最终使用 sdf.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
现在,我们的一位朋友曾经使用setTimeZone(TimeZone.getTimeZone("PST"));过转换为美国太平洋时区,并且转换正常进行。
问题是
TimeZone.getTimeZone("PST");和之间有什么区别TimeZone.getTimeZone("America/Los_Angeles");
哪个更好用?
引用文档进行容易出错的ThreeLetterTimeZoneID检查:
根据Javadoc
java.util.TimeZone:为了与JDK 1.1.x兼容,还支持其他三个字母的时区ID(例如“ PST”,“ CTT”,“ AST”)。但是,不赞成使用它们,因为通常在多个时区使用相同的缩写(例如,“ CST”可以是美国的“ Central Standard Time”和“ China Standard Time”),然后Java平台只能识别以下一种他们。
除了时区之间的歧义性之外,对于返回的时区,遵守夏令时还有不一致的地方,这意味着获得的TimeZone可能不是您期望的。示例包括:
DateTime.getTimeZone("PST")是否遵守夏令时;但是,该标识符表示它是太平洋标准时间,即未遵守夏令时。DateTime.getTimeZone("EST")(和"MST"和"HST")不要遵守夏令时。但是,这与PST(及其他)不一致,因此您可能会相信可以节省夏令时。
因此:使用完整America/Los_Angeles格式可以最大程度地减少代码中的歧义。