获取 Java 国家代码所在地区的时区
Get timezone of area with country code in Java
我必须传递带有时区信息的消息 (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]
我期待 "America/Los_Angeles" 的列表,...
如果我没理解错的话,您似乎只想要一个给定国家/地区的时区列表。该站点列出了所有拥有自己的代码的国家/地区:
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;
}
根据文档,getTimeZone
方法 returns 指定的 TimeZone
或 GMT
区域(如果无法理解给定的 ID)。没有名为 US 的时区 ID,因此它给出了 GMT 时区。如果你真的想获得美国可用的所有时区列表,我建议你使用以下内容。
final List<String> timeZonesInUS = Stream.of(TimeZone.getAvailableIDs())
.filter(zoneId -> zoneId.startsWith("US")).collect(Collectors.toList());
内置 Java 类 不提供此功能,但 ICU's TimeZone class 提供,并且 TimeZone.getAvailableIDs("US")
提供正确答案。
我必须传递带有时区信息的消息 (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]
我期待 "America/Los_Angeles" 的列表,...
如果我没理解错的话,您似乎只想要一个给定国家/地区的时区列表。该站点列出了所有拥有自己的代码的国家/地区:
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;
}
根据文档,getTimeZone
方法 returns 指定的 TimeZone
或 GMT
区域(如果无法理解给定的 ID)。没有名为 US 的时区 ID,因此它给出了 GMT 时区。如果你真的想获得美国可用的所有时区列表,我建议你使用以下内容。
final List<String> timeZonesInUS = Stream.of(TimeZone.getAvailableIDs())
.filter(zoneId -> zoneId.startsWith("US")).collect(Collectors.toList());
内置 Java 类 不提供此功能,但 ICU's TimeZone class 提供,并且 TimeZone.getAvailableIDs("US")
提供正确答案。