如何获得时区缩写,如IST(印度标准时间),ET(东部时间)等 .
我使用下面的代码来获取android中的时区信息,
Option 1:
String mobileTimeZone = Calendar.getInstance().getTimeZone()
.getDisplayName(false, TimeZone.SHORT);
我选择了不同的时区和输出如下,
GMT格林威治标准时间13:00 00:00
但是当设置某些时区时,它会给我正确的缩写代码作为输出,如下所示,
EST
我还尝试了下面的代码,它给出了时区的完整描述 .
Option 2:
String mobileTimeZone = Calendar.getInstance().getTimeZone().getID();
获得以下输出,这只是区域名称:
太平洋/中途太平洋/檀香山美国/蒙得维的亚
是否有任何id或表的列表,包含所有时区供我映射 .
而且还需要考虑白天节省的费用 .
帮我从android手机上获取Time Zone的缩写 .
1 回答
About terminology:
我们调用像"America/Denver"等字符串(格式为region / city) timezone identifiers ,而不是名字 . 这些ID在IANA-TZDB中定义 . Timezone names and abbreviations 是一个完全不同的概念 . 这些数据通常起源于CLDR文件(来自Unicode联盟,例如here),并且对应于大多数人对其本地人的期望 . 这些名称是高度本地化的 . 一般而言,没有国际标准,既没有标识符也没有名称 . 后者只是遵循当地习俗 .
Mapping:
从IANA-TZDB可以找到从时区标识符到国家/地区代码的映射,反之亦然 . 然后,您可以快速查看没有您期望的唯一映射 . 例子:
或者琐碎:
您希望使用表达式获得唯一的时区缩写
是不现实的 . The method to get tz abbreviations you describe is correct. 但是,正如您自己在其他_1176910中发现的那样,结果因Android设备而异 . 主要原因是不同的设备(dalvik vms)通常具有不同的时区名称数据(以及OpenJDK-Oracle-VMs) .
从时区名称和缩写到国家/地区代码的唯一映射通常是不可能的 . 反例:“IST”可代表“印度标准时间”或以色列时区 . 或者:“BST”用于“欧洲/伦敦”(夏季时)或“太平洋/布干维尔”(全年) .
About daylight saving:
标识符对夏令时不敏感 . 相关数据可以是夏令时还是不依赖于相关时间 . 时区名称和缩写通常(并非总是)敏感,例如在美国比较“PST”或“PDT” .
Summary and advice:
不要将时区名称或缩写用于显示目的以外的任何其他内容 . 您不应将这些本地化数据用于任何结论或存储目的 .