我必须传递一条带有时区信息的消息(jms(,例如(美国/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]
我期待"美国/Los_Angeles"列表,...
内置的Java类不提供这个,但ICU的时区类提供,TimeZone.getAvailableIDs("US")
提供了正确的答案。
根据文档,getTimeZone
方法返回指定的TimeZone
,如果无法理解给定的 ID 或GMT
区域。没有称为US的时区ID,因此它给出了GMT区域。如果您真的想获得美国可用的所有时区列表,我建议您使用以下。
final List<String> timeZonesInUS = Stream.of(TimeZone.getAvailableIDs())
.filter(zoneId -> zoneId.startsWith("US")).collect(Collectors.toList());
如果我理解正确,看起来您只需要给定国家/地区的时区列表。该网站列出了拥有自己代码的所有国家/地区:
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;
}