我有一个java TimeZone对象,例如America/Denver
。从理论上讲,IANA database列出了该TimeZone的一个国家/地区代码,即US
。
在java或Android中,如何获取指定TimeZone对象的国家/地区?
更新:请注意,我不是在谈论将GMT+0700
映射到特定国家/地区。显然,可能有多个国家/地区映射到单个原始偏移量。我正在谈论将特定时区代码从https://en.wikipedia.org/wiki/Zone.tab映射到其关联的单一国家/地区代码。
答案 0 :(得分:6)
为了在国家/地区和时区之间进行映射,我使用了ICU library。 使用com.ibm.icu.util.TimeZone.getAvailableIDs(countryCode)方法,我设法将时区映射到国家/地区代码。
public static Map<String, String> mapTimezonesToCountries() {
Map<String, String> timezoneToCountry = new HashMap<>();
String[] locales = Locale.getISOCountries();
for (String countryCode : locales) {
for (String id : com.ibm.icu.util.TimeZone.getAvailableIDs(countryCode))
{
// Add timezone to result map
timezoneToCountry.put(id, countryCode);
}
}
return timezoneToCountry;
}
答案 1 :(得分:0)
你不能,从TimeZone到Country没有1:1的关系 例如,还有timeZone“UTC”
答案 2 :(得分:0)
您为zone.tab指定的链接实际上是您要查找的数据的来源。当然,你想要使用authoritative,而不是维基百科上的副本。
IANA / Olson数据库使用JodaTime库在Java中实现。但我不相信他们会通过任何类公开zone.tab。至少我找不到它。如果我不正确,请更新我。
您始终可以自行导入文件并根据需要使用它。
<强>更新强>
我对Android一无所知,但我发现了一些对你有用的东西。似乎有一个函数公开libcore.icu.TimeZoneNames.forLocale(locale)
中的zone.tab数据我搜索过,但我找不到任何参考文档。