如何获得时区缩写,如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的缩写。
答案 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;在美国。
摘要和建议:
请勿将时区名称或缩写用于显示目的以外的任何其他内容。您不应将这些本地化数据用于任何结论或存储目的。