如何获取android中移动时区的缩写/国家代码?
How to get the abbreviation / Country code of mobile timezone in android?
如何获取时区缩写,如 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();
得到以下输出,它只是区域名称:
Pacific/Midway
Pacific/Honolulu
America/Montevideo
是否有任何 id 列表或 table 具有所有时区供我映射。
并且还需要考虑夏令时。
帮我从android手机上获取时区的缩写。
关于术语:
我们称 "America/Denver" 等字符串(格式 region/city)时区标识符,而不是名称。这些 id 在 IANA-TZDB 中定义。 时区名称和缩写是一个完全不同的概念。这些数据通常起源于 CLDR 文件(来自 Unicode 联盟,例如 here),并且符合大多数人在其 LOCALES 中的期望。这些名称是高度本地化的。一般来说,没有国际标准,无论是标识符还是名称。后面的只是顺应当地风俗
映射:
可以在 IANA-TZDB 中找到从时区标识符到国家代码的映射,反之亦然。然后您可以快速看到没有您期望的唯一映射。示例:
Europe/Zurich can be valid in Switzerland, Germany(sic!) and
Liechtenstein.
或者简单地说:
US has more than one timezone (America/New_York, America/Chicago,
etc.)
您希望使用表达式
获得独特的时区缩写
Calendar.getInstance().getTimeZone().getDisplayName(false, TimeZone.SHORT);
不现实。 您描述的获取 tz 缩写的方法是正确的。 但是,正如您自己在其他 SO-post 中注意到的那样,结果因 Android 设备而异。主要原因是不同的设备(dalvik vms)通常具有不同的时区名称数据(以及 OpenJDK-Oracle-VMs)。
从时区名称和缩写到国家/地区代码的唯一映射通常是不可能的。反例:"IST" 可以代表 "India Standard Time" 或以色列时区。或者:"BST" 用于 "Europe/London"(夏令时)或 "Pacific/Bougainville"(全年)。
关于夏令时:
标识符对夏令时不敏感。相关数据可以是夏令时也可以不是,这取决于相关联的时间。时区名称和缩写通常(并非总是)敏感,例如比较美国的 "PST" 或 "PDT"。
总结与建议:
请勿将时区名称或缩写用于显示目的以外的任何用途。您不应将这些本地化数据用于任何结论或存储目的。
如何获取时区缩写,如 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();
得到以下输出,它只是区域名称:
Pacific/Midway
Pacific/Honolulu
America/Montevideo
是否有任何 id 列表或 table 具有所有时区供我映射。
并且还需要考虑夏令时。
帮我从android手机上获取时区的缩写。
关于术语:
我们称 "America/Denver" 等字符串(格式 region/city)时区标识符,而不是名称。这些 id 在 IANA-TZDB 中定义。 时区名称和缩写是一个完全不同的概念。这些数据通常起源于 CLDR 文件(来自 Unicode 联盟,例如 here),并且符合大多数人在其 LOCALES 中的期望。这些名称是高度本地化的。一般来说,没有国际标准,无论是标识符还是名称。后面的只是顺应当地风俗
映射:
可以在 IANA-TZDB 中找到从时区标识符到国家代码的映射,反之亦然。然后您可以快速看到没有您期望的唯一映射。示例:
Europe/Zurich can be valid in Switzerland, Germany(sic!) and Liechtenstein.
或者简单地说:
US has more than one timezone (America/New_York, America/Chicago, etc.)
您希望使用表达式
获得独特的时区缩写Calendar.getInstance().getTimeZone().getDisplayName(false, TimeZone.SHORT);
不现实。 您描述的获取 tz 缩写的方法是正确的。 但是,正如您自己在其他 SO-post 中注意到的那样,结果因 Android 设备而异。主要原因是不同的设备(dalvik vms)通常具有不同的时区名称数据(以及 OpenJDK-Oracle-VMs)。
从时区名称和缩写到国家/地区代码的唯一映射通常是不可能的。反例:"IST" 可以代表 "India Standard Time" 或以色列时区。或者:"BST" 用于 "Europe/London"(夏令时)或 "Pacific/Bougainville"(全年)。
关于夏令时:
标识符对夏令时不敏感。相关数据可以是夏令时也可以不是,这取决于相关联的时间。时区名称和缩写通常(并非总是)敏感,例如比较美国的 "PST" 或 "PDT"。
总结与建议:
请勿将时区名称或缩写用于显示目的以外的任何用途。您不应将这些本地化数据用于任何结论或存储目的。