代码之家  ›  专栏  ›  技术社区  ›  Manvi

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

  •  2
  • Manvi  · 技术社区  · 7 年前

    我必须传递一条带有时区信息的消息(JMS),比如(美国/洛杉矶),但我只有国家名称和代码。如果可以用Java代码获取时区信息。在我读到的地方:

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

    但它的输出是

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

    我期待着“美国/洛杉矶”的名单…

    3 回复  |  直到 7 年前
        1
  •  1
  •   Ravindra Ranwala    7 年前

    根据文件 getTimeZone 方法返回指定的 TimeZone GMT 无法理解给定ID的区域。没有调用时区ID 美国 因此它给出了格林尼治标准时间。如果你真的想得到我们所有可用时区的列表,我建议你使用下面的列表。

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

    如果我理解正确的话,看起来你只是想要一份特定国家的时区列表。此网站列出了所有拥有自己代码的国家:

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

    通过查看时区的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;
    
    }
    
        3
  •  0
  •   arnt    6 年前

    构建Java类不提供这个,但是 ICU's TimeZone class 有,和 TimeZone.getAvailableIDs("US") 提供正确答案。