2015-03-31 350 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

相关问题