使用Java获取国家/地区代码区域的时区

时间:2018-05-23 22:05:42

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

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

math.randomseed(os.time())

但它的输出为

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

我期待着#34; America / Los_Angeles",...

的列表

3 个答案:

答案 0 :(得分:1)

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

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;

}

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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