在Java中获取带有国家代码的地区时区

在Java中获取带有国家代码的地区时区,java,java-8,timezone,google-api-java-client,java-calendar,Java,Java 8,Timezone,Google Api Java Client,Java Calendar,我必须传递一条带有时区信息的消息(jms),比如(美国/洛杉矶),但我只有国家名称和代码。如果可能,用Java代码获取时区信息。我在某处读到: System.out.println(TimeZone.getTimeZone("US")); 但它的输出是 sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] 我期待着“美国/洛杉矶”的列表,

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

System.out.println(TimeZone.getTimeZone("US"));
但它的输出是

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

我期待着“美国/洛杉矶”的列表,…

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

查看时区的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;

}
公共静态列表区域(字符串国家){
列表区域=新的ArrayList();
for(字符串i:TimeZone.getAvailableIDs()){
如果(i.startsWith(国家)){
添加(i);
}
}
返回区;
}

根据文档,
getTimeZone
方法返回指定的
时区,如果无法理解给定ID,则返回
GMT
时区。没有称为US的时区ID,因此它给出了GMT区域。如果你真的想得到美国所有可用时区的列表,我建议你使用以下选项

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

内置Java类不提供此功能,但提供,并且
TimeZone.getAvailableIDs(“US”)
提供了正确答案。

一个国家的所有时区?是的,如果可能,请列出它未内置于Java中。你也许可以在某个数据库的某个地方找到这些信息。这将为你提供不推荐的时区,如美国/阿拉斯加,而不是当前的美国/阿达克或美国/洛杉矶。我不是说这不够好,只是三思而后行。它对其他国家代码也不起作用。我完全同意你的看法。你能推荐其他更好的方法吗?对不起,不太好,拉文德拉·兰瓦拉。当然,你可以尝试解析并使用表格最左边一栏中的国家代码。除了我们之外,你在其他国家也尝试过这种方法吗?US是一个简单的例子,但“AU”或其他返回空列表的对象呢?那么,有什么解决办法吗?不幸的是,我没有。时区不包含国家名称。它们包含大陆和城市名称