仅通过国家名称获取时区的方法是否存在?

3

您好,我知道这个问题已经被问了很多次,但那些问题都涉及到Web服务。我正在开发一个应用程序,通过用户选择国家来显示时区。

例如,我有所有国家的列表,当用户从中选择一个国家时,我想通过国家名称(可能是字符串“Canada”)搜索时区。如果我像这样搜索,是否可以从Android设备获取时区?注意:我的应用程序不使用互联网连接。我希望在没有互联网连接的情况下实现这些功能。

除此之外还有其他相关的方法吗?


请确保您意识到许多国家拥有不止一个时区。您不能仅凭国家名称选择时区。 - Matt Johnson-Pint
3个回答

2
如果我理解你的问题,你可以尝试像这样做 -
String[] tzIds = TimeZone.getAvailableIDs();
List<String> al = new ArrayList<String>();
for (String timeZoneId : tzIds) {
  if (timeZoneId.startsWith("Canada")) {
    al.add(timeZoneId);
  }
}
System.out.println(al);

这里的输出(稍作重新格式化)是:
[Canada/Pacific, Canada/Yukon, Canada/Mountain, Canada/Central, 
 Canada/East-Saskatchewan, Canada/Saskatchewan, Canada/Eastern, 
 Canada/Atlantic, Canada/Newfoundland]

1

你可以做:

TimeZone tz = TimeZone.getTimeZone (id);

在此处,id 必须是形式为 Area/Location 的 Olson 名称,例如 America/Los_Angeles。

您可以使用以下方式获取可用的时区:

String[] ids = TimeZone.getAvailableIDs(0);

官方文档:http://developer.android.com/reference/java/util/TimeZone.html

0

国家时区映射数据库的答案可以解决你大部分的问题。

如果你想避免使用互联网,那么你应该能够将其中一个数据库嵌入到你的Android应用程序中。然而,这显然存在一个问题,即旧版本的Android应用程序可能具有(越来越)过时的时区信息。

最后,你需要知道一些国家有多个时区,因此你不能仅从国家名称确定“时区”。


其他人建议使用TimeZone API,并使用时区 ID 来确定国家名称。不幸的是,这行不通1。 "Olson" 数据库中的时区 ID 是"Area/Location"的形式,其中区域是"America","Africa"等,而位置通常是城市名。官方 ID 不使用国家名称。

维基百科参考:TZ database : names of zones

(显然,zone.tab 数据包括国家代码,但我认为在 Java / Android TimeZone API 中未公开。)


1 - 除非该国家是澳大利亚 :-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接