- 所有已实现的接口:
Serializable
- 已知子类:
ZoneOffset
Europe/Paris 。
ZoneId 用于标识用于在 Instant 和 LocalDateTime 之间转换的规则。有两种不同类型的 ID:
- 固定偏移量——UTC/Greenwich 的完全解析偏移量,对所有本地日期时间使用相同的偏移量
- 地理区域 - 应用一组特定规则来查找与 UTC/格林威治的偏移量的区域
ZoneOffset 表示。在任何 ZoneId 上调用 normalized() 将确保固定偏移 ID 将表示为 ZoneOffset。
描述偏移量何时以及如何变化的实际规则由 ZoneRules 定义。这个类只是一个用于获取底层规则的ID。之所以采用这种方法,是因为规则是由政府定义的并且经常更改,而 ID 是稳定的。
这种区别还有其他影响。序列化 ZoneId 只会发送 ID,而序列化规则会发送整个数据集。同样,两个 ID 的比较只检查 ID,而两个规则的比较检查整个数据集。
时区 ID
ID 在系统内是唯一的。 ID 分为三种类型。最简单的 ID 类型是来自 ZoneOffset 的 ID。这由“Z”和以“+”或“-”开头的 ID 组成。
下一类 ID 是带有某种形式前缀的偏移式 ID,例如“GMT+2”或“UTC+01:00”。公认的前缀是“UTC”、“GMT”和“UT”。偏移量是后缀,会在创建时归一化。这些 ID 可以使用 normalized() 标准化为 ZoneOffset。
第三种 ID 是基于区域的 ID。基于区域的 ID 必须包含两个或更多字符,并且不能以“UTC”、“GMT”、“UT”、“+”或“-”开头。基于区域的 ID 由配置定义,请参阅 ZoneRulesProvider 。该配置侧重于提供从 ID 到底层 ZoneRules 的查找。
时区规则由政府定义并经常更改。有许多组织(这里称为组)监视时区变化并整理它们。默认组是 IANA 时区数据库 (TZDB)。其他组织包括 IATA(航空业机构)和 Microsoft。
每个组为其提供的区域 ID 定义自己的格式。 TZDB 组定义了诸如“Europe/London”或“America/New_York”之类的 ID。 TZDB ID 优先于其他组。
强烈建议将组名称包含在 TZDB 以外的组提供的所有 ID 中,以避免冲突。例如,IATA 航空公司时区 ID 通常与三字母机场代码相同。但是,乌得勒支机场的代码是“UTC”,这显然是冲突的。来自 TZDB 以外的组的区域 ID 的推荐格式是“group~region”。因此,如果定义了 IATA 数据,乌得勒支机场将是“IATA~UTC”。
连载
该类可以被序列化并以外部形式存储字符串区域ID。ZoneOffset 子类使用专用格式,仅存储与 UTC/格林威治的偏移量。
ZoneId 可以在 ID 未知的 Java 运行时中反序列化。例如,如果服务端 Java 运行时已更新为新的区域 ID,但客户端 Java 运行时尚未更新。在这种情况下,ZoneId 对象将存在,并且可以使用 getId、equals、hashCode、toString、getDisplayName 和 normalized 进行查询。但是,对 getRules 的任何调用都将失败并返回 ZoneRulesException 。此方法旨在允许在时区信息不完整的 Java 运行时上加载和查询 ZonedDateTime ,但不能对其进行修改。
这是一个value-based类;程序员应该将 equal 的实例视为可互换的,并且不应使用实例进行同步,否则可能会发生不可预测的行为。例如,在未来的版本中,同步可能会失败。 equals 方法应该用于比较。
-
字段摘要
字段 -
方法总结
修饰符和类型方法描述boolean检查此时区 ID 是否等于另一个时区 ID。static ZoneIdfrom(TemporalAccessor temporal) 从时间对象中获取ZoneId的实例。获取可用区域 ID 的集合。getDisplayName(TextStyle style, Locale locale) 获取区域的文本表示形式,例如“英国时间”或“+02:00”。abstract StringgetId()获取唯一的时区 ID。abstract ZoneRulesgetRules()获取允许执行计算的此 ID 的时区规则。inthashCode()此时区 ID 的哈希码。规范化时区 ID,尽可能返回ZoneOffset。static ZoneId从 ID 中获取ZoneId的实例,确保该 ID 有效且可供使用。static ZoneId使用别名映射来补充标准区域 ID,使用其 ID 获取ZoneId的实例。static ZoneIdofOffset(String prefix, ZoneOffset offset) 获得ZoneId包装偏移量的实例。static ZoneId获取系统默认时区。toString()使用 ID 将此区域输出为String。
-
字段详细信息
-
SHORT_IDS
区域映射重写以启用要使用的短时区名称。java.util.TimeZone中已弃用短区域 ID。此map允许通过of(String, Map)工厂方法继续使用 ID。此map包含符合 TZDB 2005r 及更高版本的 ID 映射,其中“EST”、“MST”和“HST”映射到不包括夏令时的 ID。
这映射如下:
- EST - -05:00
- HST - -10:00
- MST - -07:00
- ACT - 澳大利亚/达尔文
- AET - 澳大利亚/悉尼
- AGT - 美国/阿根廷/布宜诺斯艾利斯
- 艺术 - 非洲/开罗
- AST - 美国/安克雷奇
- BET - 美国/圣保罗
- BST - 亚洲/达卡
- CAT - 非洲/哈拉雷
- CNT - 美国/St_Johns
- CST——美国/芝加哥
- CTT - 亚洲/上海
- EAT - 非洲/亚的斯亚贝巴
- ECT - 欧洲/巴黎
- IET - 美国/印第安纳州/印第安纳波利斯
- IST - 亚洲/加尔各答
- JST - 亚洲/东京
- 麻省理工学院 - 太平洋/阿皮亚
- NET - 亚洲/埃里温
- NST - 太平洋/奥克兰
- PLT - 亚洲/卡拉奇
- PNT - 美洲/凤凰城
- PRT - 美洲/波多黎各
- PST - 美国/洛杉矶
- SST - 太平洋/瓜达尔卡纳尔
- VST - 亚洲/胡志明市
-
-
方法详情
-
systemDefault
获取系统默认时区。这查询
TimeZone.getDefault()以找到默认时区并将其转换为ZoneId。如果更改系统默认时区,则此方法的结果也会更改。- 返回:
- 区域 ID,不为空
- 抛出:
DateTimeException- 如果转换后的区域 ID 格式无效ZoneRulesException- 如果找不到转换后的区域 ID
-
getAvailableZoneIds
获取可用区域 ID 的集合。该集合包括所有可用的基于区域的 ID 的字符串形式。基于偏移的区域 ID 不包含在返回的集合中。该 ID 可以传递给
of(String)以创建一个ZoneId。区域 ID 集可以随时间增加,尽管在典型应用程序中 ID 集是固定的。对此方法的每次调用都是线程安全的。
- 返回:
- 一组区域 ID 的可修改副本,不为空
-
of
使用别名映射来补充标准区域 ID,使用其 ID 获取ZoneId的实例。许多时区用户使用简短的缩写,例如 PST 表示“太平洋标准时间”,PDT 表示“太平洋夏令时”。这些缩写不是唯一的,因此不能用作 ID。此方法允许在应用程序中设置和重用字符串到时区的映射。
- 参数:
zoneId- 时区 ID,不为空aliasMap- 别名区域 ID(通常是缩写)到真实区域 ID 的映射,不为空- 返回:
- 区域 ID,不为空
- 抛出:
DateTimeException- 如果区域 ID 的格式无效ZoneRulesException- 如果区域 ID 是无法找到的区域 ID
-
of
从 ID 中获取ZoneId的实例,确保该 ID 有效且可供使用。此方法解析生成
ZoneId或ZoneOffset的 ID。如果 ID 为“Z”或以“+”或“-”开头,则返回ZoneOffset。结果将始终是一个有效的 ID,可以为其获取ZoneRules。解析匹配zone ID的步骤如下。
- 如果区域 ID 等于“Z”,则结果为
ZoneOffset.UTC。 - 如果区域 ID 由单个字母组成,则区域 ID 无效并抛出
DateTimeException。 - 如果区域 ID 以“+”或“-”开头,则使用
ZoneOffset.of(String)将 ID 解析为ZoneOffset。 - 如果区域 ID 等于“GMT”、“UTC”或“UT”,则结果是具有相同 ID 和规则的
ZoneId等同于ZoneOffset.UTC。 - 如果区域 ID 以“UTC+”、“UTC-”、“GMT+”、“GMT-”、“UT+”或“UT-”开头,则该 ID 是一个基于偏移量的前缀 ID。 ID 分为两部分,有两个或三个字母的前缀和一个以符号开头的后缀。后缀被解析为
ZoneOffset。结果将是一个ZoneId,带有指定的 UTC/GMT/UT 前缀和按照ZoneOffset.getId()的规范化偏移 ID。返回的规则ZoneId将等同于解析的ZoneOffset。 - 所有其他 ID 都被解析为基于区域的区域 ID。区域 ID 必须与正则表达式
[A-Za-z][A-Za-z0-9~/._+-]+匹配,否则将抛出DateTimeException。如果区域 ID 不在配置的 ID 集中,则抛出ZoneRulesException。区域 ID 的详细格式取决于提供数据的组。默认数据集由 IANA 时区数据库 (TZDB) 提供。这具有“{area}/{city}”形式的区域 ID,例如“欧洲/巴黎”或“美国/纽约”。这与TimeZone中的大多数 ID 兼容。
- 参数:
zoneId- 时区 ID,不为空- 返回:
- 区域 ID,不为空
- 抛出:
DateTimeException- 如果区域 ID 的格式无效ZoneRulesException- 如果区域 ID 是无法找到的区域 ID
- 如果区域 ID 等于“Z”,则结果为
-
ofOffset
获得ZoneId包装偏移量的实例。如果前缀是“GMT”、“UTC”或“UT”,则返回带有前缀和非零偏移量的
ZoneId。如果前缀为空"",则返回ZoneOffset。- 参数:
prefix- 时区 ID,不为空offset- 偏移量,不为空- 返回:
- 区域 ID,不为空
- 抛出:
IllegalArgumentException- 如果前缀不是“GMT”、“UTC”或“UT”或“”之一
-
from
从时间对象中获取ZoneId的实例。这将根据指定的时间获得一个区域。
TemporalAccessor表示一组任意的日期和时间信息,该工厂将其转换为ZoneId的一个实例。TemporalAccessor代表某种形式的日期和时间信息。该工厂将任意时间对象转换为ZoneId的实例。转换将尝试使用
TemporalQueries.zone()以有利于基于区域的区域而不是基于偏移的区域的方式获取区域。此方法与功能接口
TemporalQuery的签名相匹配,允许它通过方法参考ZoneId::from用作查询。- 参数:
temporal- 要转换的时间对象,不为空- 返回:
- 区域 ID,不为空
- 抛出:
DateTimeException- 如果无法转换为ZoneId
-
getId
获取唯一的时区 ID。这个 ID 唯一地定义了这个对象。基于偏移量的 ID 的格式由
ZoneOffset.getId()定义。- 返回:
- 时区唯一 ID,不为空
-
getDisplayName
获取区域的文本表示形式,例如“英国时间”或“+02:00”。这将返回用于标识时区 ID 的文本名称,适合呈现给用户。参数控制返回文本的样式和locale。
如果未找到文本映射,则返回
full ID。- 参数:
style- 所需文本的长度,不为空locale- 要使用的locale,不为空- 返回:
- 区域的文本值,不为空
-
getRules
获取允许执行计算的此 ID 的时区规则。这些规则提供与时区相关的功能,例如查找给定时刻或本地日期时间的偏移量。
如果时区在 Java 运行时中反序列化,而该 Java 运行时没有加载与存储它的 Java 运行时相同的规则,则时区可能无效。在这种情况下,调用此方法将抛出
ZoneRulesException。规则由
ZoneRulesProvider提供。高级提供者可以支持在不重新启动 Java 运行时的情况下对规则进行动态更新。如果是这样,那么这个方法的结果可能会随着时间的推移而改变。每个单独的调用仍将保持线程安全。ZoneOffset将始终返回一组偏移量永远不会改变的规则。- 返回:
- 规则,不为空
- 抛出:
ZoneRulesException- 如果此 ID 没有可用的规则
-
normalized
规范化时区 ID,尽可能返回ZoneOffset。返回一个规范化的
ZoneId可以用来代替这个 ID。结果将具有ZoneRules等同于此对象返回的那些,但是getId()返回的 ID 可能不同。规范化检查此
ZoneId的规则是否具有固定偏移量。如果是,则返回等于该偏移量的ZoneOffset。否则返回this。- 返回:
- 时区唯一 ID,不为空
-
equals
检查此时区 ID 是否等于另一个时区 ID。比较基于ID。
-
hashCode
public int hashCode()此时区 ID 的哈希码。 -
toString
使用 ID 将此区域输出为String。
-