我必须传递一个带有时区信息的消息(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]
我期待着“美国/洛杉矶”的列表,...
发布于 2018-05-24 10:22:15
根据文档,getTimeZone
方法返回指定的TimeZone
,如果无法识别给定的ID,则返回GMT
区域。没有名为US的TimeZone ID,因此它给出了格林威治时间区域。如果你真的想得到所有在美国可用的TimeZones列表,我建议你使用下面的列表。
final List<String> timeZonesInUS = Stream.of(TimeZone.getAvailableIDs())
.filter(zoneId -> zoneId.startsWith("US")).collect(Collectors.toList());
发布于 2019-05-30 01:03:59
内置的Java类不提供这一点,但是ICU's TimeZone class提供了,并且TimeZone.getAvailableIDs("US")
提供了正确的答案。
发布于 2018-05-24 07:31:16
如果我没理解错的话,看起来你只是想要一个给定国家的时区列表。该站点列出了所有拥有自己代码的国家/地区:
https://garygregory.wordpress.com/2013/06/18/what-are-the-java-timezone-ids/
查看用于TimeZones的应用程序接口,您会发现无法直接通过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;
}
https://stackoverflow.com/questions/50498146
复制相似问题