java.time的官方区域名称列表在哪里?

时间:2017-02-28 15:08:59

标签: java java-time

是否有正式的区域名称列表用于以下内容:

zoneId = ZoneId.of("America/New_York")

或者java.time.ZoneId是否可以生成我可以使用的列表本身?

我使用它将Instant转换为时间的字符串表示形式,如:

ZoneDateTime.ofInstant(instant, zoneId).format(DateTimeFormatter.ofPattern("..."))

4 个答案:

答案 0 :(得分:8)

只需使用getAvailableZoneIds方法。

  

获取可用区域ID的集合。

     

此集包括所有可用的基于区域的ID的字符串形式。   基于偏移的区域ID不包含在返回的集合中。身份证可以   传递给(String)以创建ZoneId。

Set<String> zoneIds= ZoneId.getAvailableZoneIds();

for (String zone : zoneIds) {
    System.out.println(zone);
}

答案 1 :(得分:2)

  

是否有正式的区域名称列表用于   以下内容:

不,Java没有维护任何正式的区域名称列表。它宁愿从IANA获取该信息。您还可以指定JVM以使用您的自定义区域名称信息文件来覆盖IANA中的文件。

JVM从名为tzdb.dat的二进制文件加载时区信息,该文件位于以下位置:

$JAVA_HOME\lib

此文件依次是从IANA安装JRE时生成的。

如果IANA出于某些原因更新了时区信息,并且您想要更新JVM的缓存副本(tzdb.dat),则可以使用名为tzupdater.jar的JVM实用程序来实现。或者,您也可以重新安装JRE。

最后,如果您不信任从IANA网站获取的tzdb.dat中的时区信息数据,则可以通过指定名为{{1的系统属性来提供自定义时区信息文件}}

答案 2 :(得分:1)

可以通过使用Java ZoneId或TimeZone类来获取此列表。

此处定义了ZoneId类:

https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html

以下代码将使用ZoneId Class

打印所有时区
package com.javadb;

import java.time.ZoneId;
import java.util.TreeSet;

/**
 * Displays available time zones (zoneIds)
 *
 * @author www.javadb.com
 */
public class DisplayTimeZones {

    public static void main(String[] args) {

        TreeSet<String> sortedZones = new TreeSet<>(ZoneId.getAvailableZoneIds());

        System.out.println("Number of zones: " + sortedZones.size());
        System.out.println("");

        for (String zone : sortedZones) {
        System.out.println(zone);
       }

    //Or if you want to use functional operations
    /*
    sortedZones.stream().forEach((zone) -> {
        System.out.println(zone);
    });
    */
    } 
}

输出:

Number of zones: 585

Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
...

使用Java TimeZone类java.util.TimeZone可以通过调用:

获取列表
TimeZone.getAvailableIDs()

此外,如果使用Joda-Time,类DateTimeZone getAvailableIDs()也可以使用。

答案 3 :(得分:1)

正如其他答案所说,在代码中获取此列表的方法是使用ZoneId.getAvailableZoneIds()

但是,如果您只想浏览一个“正式”列表,则数据为available from IANA,但这是用于计算机的格式。细读数据is on Wikipedia的最简单方法。 (通常免责声明Wikipedia是Wikipedia ...)

您还应该注意,如果目标JRE最近没有更新,则对IANA / Wikipedia数据的最新更改可能不会出现。