如何在android中获取移动时区的缩写/国家代码?

时间:2015-03-31 06:35:41

标签: android timezone abbreviation

如何获得时区缩写,如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 mobile获取Time Zone的缩写。

1 个答案:

答案 0 :(得分:9)

关于术语:

我们称之为" America / Denver"等(格式区域/城市)时区标识符,而不是名称。这些ID在IANA-TZDB中定义。 时区名称和缩写是一个完全不同的概念。这些数据通常起源于CLDR文件(来自Unicode联盟,例如here),并且对应于大多数人对其本地的期望。这些名称是高度本地化的。一般而言,没有国际标准,既没有标识符也没有名称。后者只是遵循当地习俗。

<强>映射:

可以在IANA-TZDB中找到从时区标识符到国家/地区代码的映射,反之亦然。然后,您可以快速查看没有您期望的唯一映射。例子:

  

欧洲/苏黎世可以在瑞士,德国(原文如此!)和   列支敦士登。

或琐碎:

  

美国有不止一个时区(America / New_York,America / Chicago,   等)

您希望使用表达式

获得唯一的时区缩写
Calendar.getInstance().getTimeZone().getDisplayName(false, TimeZone.SHORT);

不太现实。 获取您描述的tz缩写的方法是正确的。但是,正如您自己在其他SO-post注意到的那样,结果因Android设备而异。主要原因是不同的设备(dalvik vms)通常具有不同的时区名称数据(以及OpenJDK-Oracle-VMs)。

从时区名称和缩写到国家/地区代码的唯一映射通常是不可能的。反例:&#34; IST&#34;可以代表&#34;印度标准时间&#34;或以色列时区。或者:&#34; BST&#34;用于&#34;欧洲/伦敦&#34; (在夏季)或在太平洋/布干维尔&#34; (全年)。

关于夏令时:

标识符对夏令时不敏感。相关数据可以是夏令时还是不依赖于相关时间。时区名称和缩写通常(并非总是)敏感,比较例如&#34; PST&#34;或者&#34; PDT&#34;在美国。

摘要和建议:

请勿将时区名称或缩写用于显示目的以外的任何其他内容。您不应将这些本地化数据用于任何结论或存储目的。