TimeZone.getTimeZone(“ PST”)与TimeZone.getTimeZone(“ America / Los_Angeles”)

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");

哪个更好用?

And*_*ner 6

引用文档进行容易出错的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格式可以最大程度地减少代码中的歧义。