2010-05-10 71 views
4

我寫了一個Android應用程序,需要手機當前所在的短時區名稱。獲取三個字母的短時區名稱(而不是四個字母)?

我用下面的代碼:

String timeZone = Calendar.getInstance().getTimeZone().getDisplayName(false, TimeZone.SHORT); 

當在芝加哥運行,這將返回 「CST」。在紐約,「EST」。在Strasbourg, France中,它返回「HNEC」(Heure Normale de l'Europe Centrale in French)。

這個位置的時區被一些人稱爲「中歐時間」(見維基百科的Time zones of Europe)。

我通過timeZone關閉第三方系統,非常堅持獲得「CET」(而不是「HNEC」)。是否有可以依賴的API調用返回三個字母(以及我認爲的「更現代」)的短時區名稱?

由於我的代碼在越來越多的位置運行,我猜這個問題也會發生在其他地方。

我真的希望避免維護某種三字母到四字母短時區名稱的地圖。

回答

6

對不起,但你可能堅持維護一個映射。三個字符實際上是較舊的,而不是更現代的版本。來自classdocs:

    爲了與JDK 1.1.x兼容,還支持其他一些三字母時區ID(例如「PST」,「CTT」,「AST」)。 但是,它們的使用已被棄用,因爲多個時區經常使用相同的縮寫(例如,「CST」可能是美國「中央標準時間」和「中國標準時間」),並且Java平臺只能識別其中之一。

如果這是我的問題,我會列出我的第三方系統支持並映射它。

+1

如何在android中獲取移動時區的縮寫?有什麼解決辦法嗎? – 2015-03-31 06:39:26

+0

請檢查我的答案。 – 2017-04-02 18:42:41

0

您可以使用SimpleDateFormat以三個字母或全名打印時區。例如:

DateFormat getTimeZoneShort = new SimpleDateFormat("z", Locale.US); 
String timeZoneShort = getTimeZoneShort.format(Calendar.getInstance().getTime()); 

DateFormat getTimeZoneLong = new SimpleDateFormat("zzzz", Locale.US); 
String timeZoneLong = getTimeZoneLong.format(Calendar.getInstance().getTime()); 
相關問題