2015-03-31 351 views
5

如何獲得像IST(印度標準時間),ET(東部時間)等所有時區縮寫。如何在android中獲取移動時區的縮寫/國家代碼?

我用下面的代碼來獲得在機器人的時區信息,

選項1:

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

我選擇不同的時區和如下的輸出,

GMT + 13:00

GMT + 00:00

但是,當設置一些時間帶它給了我正確的縮寫代碼,這是低於輸出,

EST

而且我也試過下面的代碼這給的時區的完整描述。

選項2:

String mobileTimeZone = Calendar.getInstance().getTimeZone().getID(); 

獲得以下輸出,只不過是區域名稱:

太平洋/中途島

太平洋/火奴魯魯

美洲/蒙得維的亞

是否有任何id或表的列表有我的所有時區映射它。

而且還需要考慮節省一天的光照。

幫助我從android手機上獲取時區的縮寫。

+0

[你有沒有訪問過](http://stackoverflow.com/questions/2807197/get-three-letter-short-timezone-name-as-opposed-to-four-letter) – BBdev 2015-03-31 06:42:48

+0

是引用。這也沒有幫助。舊帖子說該方法已被棄用。沒有得到適當的解決方案。 – 2015-03-31 06:47:15

+0

你的問題是複製與[如何從android移動時區?](http://stackoverflow.com/questions/7672597/how-to-get-timezone-from-android-mobile) – li2 2015-03-31 07:08:55

回答

6

關於術語:

我們稱像 「美國/丹佛」 等字符串(格式爲區域/城市)時區標識符,沒有名字。這些ID在IANA-TZDB中定義。 時區名稱和縮寫是完全不同的概念。這些數據通常起源於CLDR文件(來自Unicode聯盟,例如here),並且與大多數人在本地期望的內容相對應。這些名稱是高度本地化的。一般來說,沒有國際標準,既沒有標識符也沒有名稱。後者只是遵循當地習俗。

映射:

從時區標識符,以國家碼和反之亦然的映射可以在IANA-TZDB找到。然後,您可以很快看到沒有您期望的唯一映射。例如:

歐洲/蘇黎世可以在瑞士,德國(原文如此!)和 列支敦士登有效。

或者平凡:

美國有超過一個時區(美國/紐約,美國/芝加哥, 等)

您希望使用表達式來獲得獨特的時區的縮寫

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

是不現實的。 獲得您描述的tz縮寫的方法是正確的。然而,正如你自己已經注意到你的其他SO-post結果不同,從一個Android設備到另一個。主要原因是不同的設備(dalvik vms)對於時區名稱(以及OpenJDK-Oracle-VM)通常有不同的數據。

從時區名稱和縮寫到國家代碼的獨特映射通常是不可能的。反例:「IST」可以代表「印度標準時間」或以色列時區。或者:「BST」用於「歐洲/倫敦」(夏季)或「太平洋/布干維爾」(全年)。

有關夏令:

標識符不爲夏令敏感。相關數據可以是夏令時,也可以不是,取決於相關的時間。時區名稱和縮寫通常(並非總是)敏感,比如美國的「PST」或「PDT」。

總結和建議:

不要使用時區名稱或縮寫比顯示目的的任何其他。您不應將這些本地化數據用於任何結論或存儲目的。

+0

@ Meno ...感謝您的完整描述性答案...非常清楚和整齊。我想通過自己做映射來在UI中顯示用戶時區。正如你所建議的,我們不必通過我們自己進行映射,因爲IST本身具有不同的含義。所以我們刪除了向用戶顯示時區的功能。再次感謝您的支持。 – 2015-03-31 14:56:11

+0

那麼,我不會說本地化的tz名稱是不好的。許多用戶喜歡看到它(使用他們的語言和語言環境)。但我也主張提供相對於UTC的具體數字tz偏移量,以幫助用戶解釋所提供的時區和相關的時間戳。也許標識符是用戶的附加信息,但這些標識符相當技術性,並且與獨特的明確偏移量信息無關。 – 2015-03-31 15:10:09

相關問題