在Java中使用国家代码获取地区的时区

Man*_*nvi 5 java timezone google-api-java-client java-8 java-calendar

我必须传递带有时区信息的消息 (jms),例如 (America/Los_Angeles),但我只有国家/地区名称和代码。如果可能的话,用 Java 代码获取时区信息。我在某处读到这个:

System.out.println(TimeZone.getTimeZone("US"));
Run Code Online (Sandbox Code Playgroud)

但它的输出为

sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
Run Code Online (Sandbox Code Playgroud)

我期待“美国/洛杉矶”的名单,......

arn*_*rnt 5

内置 Java 类不提供此功能,但ICU 的 TimeZone 类TimeZone.getAvailableIDs("US")提供并提供正确答案。


Rav*_*ala 4

根据文档,该getTimeZone方法返回指定的TimeZoneGMT区域(如果给定的 ID 无法理解)。没有名为US 的时区 ID ,因此它提供 GMT 时区。如果您确实想获取美国可用的所有时区列表,我建议您使用以下内容。

final List<String> timeZonesInUS = Stream.of(TimeZone.getAvailableIDs())
        .filter(zoneId -> zoneId.startsWith("US")).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • 这将为您提供已弃用的时区,例如 US/Alaska,而不是当前的时区,例如 America/Adak 或 America/Los_Angeles。我并不是说它不够好,只是三思而后行。它也不适用于其他国家/地区代码。 (6认同)