【问题标题】:Get timezone of area with country code in Java在Java中获取带有国家代码的地区时区
【发布时间】:2018-11-03 00:29:12
【问题描述】:

我必须传递带有时区信息的消息 (jms),例如 (America/Los_Angeles),但我只有国家名称和代码。如果可能的话,可以使用 Java 代码获取时区信息。我在某处读到这个:

System.out.println(TimeZone.getTimeZone("US"));

但它的输出为

sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]

我期待“America/Los_Angeles”的列表,...

【问题讨论】:

  • 所有个国家的时区?
  • 是的,如果可能的话,一个列表
  • 它没有内置在 Java 中。您也许可以在某处的某个数据库中找到这些信息。

标签: java java-8 timezone google-api-java-client java-calendar


【解决方案1】:

内置 Java 类不提供此功能,但 ICU's TimeZone class 提供,TimeZone.getAvailableIDs("US") 提供正确答案。

【讨论】:

    【解决方案2】:

    根据文档,getTimeZone 方法返回指定的 TimeZone,如果给定 ID 无法理解,则返回 GMT 区域。没有名为 US 的 TimeZone ID,因此它提供了 GMT 区域。如果您真的想获得美国可用的所有时区列表,我建议您使用以下内容。

    final List<String> timeZonesInUS = Stream.of(TimeZone.getAvailableIDs())
            .filter(zoneId -> zoneId.startsWith("US")).collect(Collectors.toList());
    

    【讨论】:

    • 这将为您提供已弃用的时区,例如 US/Alaska,而不是当前的时区,例如 America/Adak 或 America/Los_Angeles。我不是说它不够好,只是三思而后行。它也不适用于其他国家/地区代码。
    • 我完全同意你的看法。您能提出其他更好的方法吗?
    • 抱歉,不是真的,Ravindra Ranwala。当然可以尝试解析List of tz database time zones 并使用表格最左列中的国家/地区代码。
    • 你在美国以外的其他国家尝试过这种方法吗? US 是一个简单的例子,但是 "AU" 或其他一些返回空列表的呢?那么,有什么解决办法吗?
    • 很遗憾,我没有。
    【解决方案3】:

    如果我的理解正确,您似乎只需要来自给定国家/地区的时区列表。该网站列出了所有拥有自己代码的国家/地区:

    https://garygregory.wordpress.com/2013/06/18/what-are-the-java-timezone-ids/

    查看 TimeZones 的 API 表明无法直接通过 TimeZone.getTimeZone() 获取时区列表。因此,您可能希望遍历它们并查看哪些以国家名称开头并将它们添加到列表中,如下所示:

    public static List<String> GetZones(String country) {
        List<String> zones = new ArrayList<>();
    
        for (String i : TimeZone.getAvailableIDs()) {
            if (i.startsWith(country)) {
                zones.add(i);
            }
        }
        return zones;
    
    }
    

    【讨论】:

    • 时区不包含国家名称。它们包含大陆和城市名称
    猜你喜欢
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多