ZoneId 主要用于识别那些将 LocalDateTime(本地日期时间)与 Instant(时间戳)进行相互转换的规则。而描述偏移量何时变化以及如何变化的实际规则,则是由 ZoneRules 定义的。这个类本质上只是一个 ID,我们用它来获取底层的规则。之所以采用这种设计,是因为政府定义的规则并经常更改,而 ID 则是相对稳定的。
ID 主要分为两种不同的类型:
- 固定偏移量:这是一个完全解析好的、相对于 UTC/Greenwich 的偏移量,对于所有本地日期时间,它都使用相同的偏移量。
- 地理区域:这是一个区域,在该区域内,适用一组特定的规则来确定相对于 UTC/Greenwich 的偏移量。
> java.time.ZoneId 类的声明
>
> public abstract class ZoneId extends Object implements Serializable
这里有一个用于覆盖的时区映射,旨在允许我们使用短时区名称。不过,在 java.util.TimeZone 中,使用短时区 ID 的方式已经被废弃了。但通过这个映射,我们依然可以通过 of(String, Map) 工厂方法来使用这些 ID。该映射包含的 ID 关系与 TZDB 2005r 及以后版本保持一致,其中 ‘EST‘、‘MST‘ 和 ‘HST‘ 映射到的 ID 不包含夏令时。
具体的映射关系如下表所示:
05:00
—
10:00
07:00
Australia/Darwin
Australia/Sydney
America/Argentina/BuenosAires
Africa/Cairo
America/Anchorage
America/SaoPaulo
Asia/Dhaka
Africa/Harare
America/StJohns
America/Chicago
Asia/Shanghai
Africa/AddisAbaba
Europe/Paris
America/Indiana/Indianapolis
Asia/Kolkata
Asia/Tokyo
Pacific/Apia
Asia/Yerevan
Pacific/Auckland
Asia/Karachi
America/Phoenix
America/PuertoRico
America/LosAngeles
Pacific/Guadalcanal
Asia/HoChiMinh注意: 该映射是不可修改的。
ZoneId 类的常用方法
描述
—
此方法检查此时区 ID 是否等于另一个时区 ID。
此方法从时间对象获取 ZoneId 的实例。
此方法获取可用的时区 ID 集合。
此方法获取区域的文本表示,例如 ‘英国时间‘ 或 ‘+02:00‘。
此方法获取唯一的时区 ID。
此方法获取此 ID 的时区规则,以便进行计算。
返回此时区 ID 的哈希码。
此方法规范化时区 ID,并在可能的情况下返回 ZoneOffset。
此方法从 ID 获取 ZoneId 的实例,确保该 ID 有效且可用。
此方法使用 ID 获取 ZoneId 的实例,并使用别名映射来补充标准时区 ID。
此方法获取封装了偏移量的 ZoneId 实例。
此方法获取系统默认时区。
此方法使用 ID 将此时区输出为字符串。下面让我们来看一些方法的实现示例:
Java
CODEBLOCK_8c75f1fe
Output
22:34:11.044312
17:04:11.044385
false