是否有正式的区域名称列表用于以下内容:
zoneId = ZoneId.of("America/New_York")
Run Code Online (Sandbox Code Playgroud)
或者java.time.ZoneId是否可以生成我可以使用的列表本身?
我正在使用它将Instant转换为时间的字符串表示形式,如:
ZoneDateTime.ofInstant(instant, zoneId).format(DateTimeFormatter.ofPattern("..."))
Run Code Online (Sandbox Code Playgroud)
VHS*_*VHS 11
是否有用于以下用途的区域名称的官方列表:
不,Java 不维护任何正式的区域名称列表。相反,它从 IANA 获取该信息。您还可以指定 JVM 使用您的自定义区域名称信息文件来覆盖来自 IANA 的区域名称信息文件。
tzdb.datJVM 从位于以下位置的名为的二进制文件加载时区信息:
$JAVA_HOME\lib
该文件又是在IANA安装 JRE 时生成的。
如果 IANA 由于某些原因更新时区信息,并且您想要更新 JVM 的缓存副本 (tzdb.dat),则可以使用 JVM 提供的名为 的实用程序来完成此操作tzupdater.jar。或者,您也可以重新安装 JRE。
最后,如果您不信任从 IANA 站点获取的 tzdb.dat 中的时区信息数据,您可以通过指定名为 的系统属性来提供自定义时区信息文件java.time.zone.DefaultZoneRulesProvider。
正如其他答案所说,在代码中获取此列表的方法是使用ZoneId.getAvailableZoneIds().
但是,如果您只是浏览想要“官方”列表,则可以从 IANA获得数据,但这是一种适用于机器的格式。阅读数据的最简单方法是在 Wikipedia 上。(通常免责声明维基百科是维基百科......)
您还应该注意,如果最近未更新,则 IANA/Wikipedia 数据的最近更改可能不会出现在您的目标 JRE 中。
只需使用getAvailableZoneIds方法即可.
获取可用区域ID的集合.
此集包括所有可用的基于区域的ID的字符串形式.基于偏移的区域ID不包含在返回的集合中.可以将ID传递给(String)以创建ZoneId.
Set<String> zoneIds= ZoneId.getAvailableZoneIds();
for (String zone : zoneIds) {
System.out.println(zone);
}
Run Code Online (Sandbox Code Playgroud)
可以通过使用 Java ZoneId 或 TimeZone 类来获取此列表。
ZoneId 类定义如下:
https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html
以下代码将使用 ZoneId 类打印所有时区
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);
});
*/
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Number of zones: 585
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
...
Run Code Online (Sandbox Code Playgroud)
使用 Java TimeZone 类,java.util.TimeZone可以通过调用以下方式获取列表:
TimeZone.getAvailableIDs()
Run Code Online (Sandbox Code Playgroud)
另外,如果使用 Joda-Time,DateTimeZone 类getAvailableIDs() 也可以工作。