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

M V*_*esh 5 timezone android abbreviation

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

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

选项1:

String mobileTimeZone =  Calendar.getInstance().getTimeZone()
                    .getDisplayName(false, TimeZone.SHORT);
Run Code Online (Sandbox Code Playgroud)

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

GMT + 13:00

GMT + 00:00

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

美东时间

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

选项2:

String mobileTimeZone = Calendar.getInstance().getTimeZone().getID();
Run Code Online (Sandbox Code Playgroud)

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

太平洋/中途岛

太平洋/火奴鲁鲁

美洲/蒙得维的亚

是否有任何id或表的列表,包含所有时区供我映射.

而且还需要考虑白天节省的费用.

帮我从android手机上获取Time Zone的缩写.

Men*_*ild 9

关于术语:

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

制图:

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

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

或者琐碎:

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

您希望使用表达式获得唯一的时区缩写

Calendar.getInstance().getTimeZone().getDisplayName(false, TimeZone.SHORT);
Run Code Online (Sandbox Code Playgroud)

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

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

关于夏令时:

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

总结和建议:

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