我來到以下好奇心: -爲什麼美國時區的三字母縮寫與夏時制不一致?
TimeZone.getTimeZone
認爲("Pacific Standard Time")等同於America/Los_Angeles
,其觀察夏令;- 但它認爲
MST
("Mountain Standard Time")等同於UTC-7
,它不遵守夏令時。
這可以用下面的代碼片段來說明:
System.out.println(
TimeZone.getTimeZone("MST").hasSameRules(TimeZone.getTimeZone("GMT-7")));
System.out.println(
TimeZone.getTimeZone("PST").hasSameRules(TimeZone.getTimeZone("America/Los_Angeles")));
輸出:
true
true
而且我們可以證明使用的三個字母的縮寫,所獲得的時區美國的四個主要時區在夏令時使用方面存在不一致:
for (String id : Arrays.asList("EST", "CST", "MST", "PST")) {
TimeZone tz = TimeZone.getTimeZone(id);
System.out.printf("%s is %s; observes DST: %s%n",
id, tz.getDisplayName(false, TimeZone.LONG), tz.useDaylightTime());
}
輸出:
EST is Eastern Standard Time; observes DST: false
CST is Central Standard Time; observes DST: true
MST is Mountain Standard Time; observes DST: false
PST is Pacific Standard Time; observes DST: true
除了一個事實,即三個字母的縮寫最佳反正避免(在Javadoc說: 「不過,建議使用它們......」) ,這看起來很混亂,並且是一個很好的微妙的錯誤來源,你在或不期望在多個時區使用夏令時。
是否有這種行爲差異的原因?美國時區是否有微妙的屬性,這意味着這種行爲是可以預料的?
我想,[Jon Skeet]的一個問題(http://stackoverflow.com/users/22656/jon-skeet)。 – Azodious