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



如何获得时区缩写,如IST(印度标准时间)、ET(东部时间)等等。

我已经使用下面的代码来获取android中的时区信息,

选项1:

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

我选择了不同的时区,输出如下,

GMT+13:00

GMT+000:00

但当设置一些时区时,它会给我正确的缩写代码作为输出,如下所示,

EST

我还尝试了下面的代码,它给出了时区的完整描述。

选项2:

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

获得以下输出,它只是区域名称:

太平洋/中途岛

太平洋/火奴鲁鲁

美国/蒙得维的亚

有没有id或表格的所有时区列表供我绘制。

而且还需要考虑白天的节省。

帮我从android手机上获取时区的缩写。

关于术语:

我们调用字符串,如"美国/丹佛"等(格式为地区/城市)时区标识符,而不是名称。这些id是在IANA-TZDB中定义的时区名称和缩写是一个完全不同的概念。这些数据通常来源于CLDR文件(例如,来自Unicode联盟),并与大多数人在本地的期望相对应。这些名称高度本地化。一般来说,无论是标识符还是名称,都没有国际标准。后者只是遵循当地风俗。

映射:

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

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

或者说:

US具有不止一个时区(美国/纽约、美国/芝加哥、,等等)

您希望使用表达式获得独特的时区缩写

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

这是不现实的获取您描述的tz缩写的方法是正确的然而,正如您自己在另一篇SO文章中所注意到的,不同的Android设备的结果不同。主要原因是不同的设备(dalvik-vm)通常具有不同的时区名称数据(以及OpenJDK Oracle VM)。

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

关于夏令时:

标识符对夏令时不敏感。相关数据可以是夏令时,也可以是非夏令时,具体取决于相关时间。时区名称和缩写通常(并不总是)敏感,例如美国的"PST"或"PDT"。

总结和建议:

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

相关内容

  • 没有找到相关文章

最新更新