【问题标题】:Is there any way to get TimeZone by only country name? [duplicate]有什么方法可以仅通过国家名称获取 TimeZone 吗? [复制]
【发布时间】:2014-07-20 02:28:35
【问题描述】:

您好,我知道这个问题被问了很多次,但这些问题与网络服务有关。我正在开发一个应用程序,按用户显示时区选择国家。 例如,我有所有国家的列表,当用户从中选择一个国家时,我想按国家名称搜索 TimeZOne(可能是字符串“加拿大”)。如果我这样搜索,是否可以从 android 设备获取时区?注意:我的应用程序不使用互联网连接。我想要这些没有互联网连接。

除此之外还有什么相关的方法吗?

【问题讨论】:

  • 确保您意识到许多国家有多个时区。您不能仅通过国家名称来选择时区。

标签: java android timezone


【解决方案1】:

如果我理解你的问题,你可以试试这样的 -

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]

【讨论】:

    【解决方案2】:

    你可以这样做:

    TimeZone tz = TimeZone.getTimeZone (id);
    

    其中id 必须是区域/位置形式的奥尔森名称,例如 America/Los_Angeles。

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

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

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

    【讨论】:

      【解决方案3】:

      Country to Timezone mapping database 的答案解决了您的大部分问题。

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

      最后,您需要注意一些国家有多个时区,因此您不能仅从一个国家名称来确定“时区”。


      其他人建议使用 TimeZone API 并使用时区 ID 来确定国家/地区名称。不幸的是,这不起作用1。 “Olson”数据库中的时区 id 的格式为“Area/Location”,其中区域为“America”、“Africa”等,而位置通常为城市名称。官方身份证不使用国名。

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

      (显然,zone.tab 数据确实包含国家/地区代码,但我认为 Java / Android TimeZone API 中没有公开。)


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

      【讨论】:

        猜你喜欢
        • 2020-12-28
        • 1970-01-01
        • 1970-01-01
        • 2018-01-16
        • 1970-01-01
        • 2016-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多