- 所有已实现的接口:
Serializable
这些规则模拟了一个时区的所有历史和未来转变。 ZoneOffsetTransition
用于已知的转换,通常是历史性的。 ZoneOffsetTransitionRule
用于基于算法结果的未来转换。
规则通过 ZoneRulesProvider
使用 ZoneId
加载。相同的规则可以在多个区域 ID 之间内部共享。
序列化 ZoneRules
的实例将存储整个规则集。它不存储区域 ID,因为它不是此对象状态的一部分。
规则实现可能会或可能不会存储有关历史和未来转换的完整信息,并且存储的信息仅与规则提供者提供给实现的信息一样准确。应用程序应将提供的数据视为代表可用于实现此规则的最佳信息。
- 实现要求:
- 这个类是不可变的和线程安全的。
- 自从:
- 1.8
- 参见:
-
方法总结
修饰符和类型方法描述boolean
检查这组规则是否与另一组相同。getDaylightSavings
(Instant instant) 获取此区域中指定时刻使用的夏令时量。获取这些规则中指定时刻适用的偏移量。getOffset
(LocalDateTime localDateTime) 为这些规则中指定的本地日期时间获取合适的偏移量。getStandardOffset
(Instant instant) 获取此区域中指定时刻的标准偏移量。getTransition
(LocalDateTime localDateTime) 获取适用于这些规则中指定本地日期时间的偏移转换。获取超出转换列表中定义的年份的转换规则列表。获取完全定义的转换的完整列表。getValidOffsets
(LocalDateTime localDateTime) 获取在这些规则中指定的本地日期时间适用的偏移量。int
hashCode()
给定#equals
的定义,返回合适的哈希码。boolean
isDaylightSavings
(Instant instant) 检查指定的时刻是否处于夏令时。boolean
区域规则的检查是固定的,因此偏移量永远不会变化。boolean
isValidOffset
(LocalDateTime localDateTime, ZoneOffset offset) 检查偏移日期时间是否对这些规则有效。nextTransition
(Instant instant) 获取指定时刻后的下一个转换。static ZoneRules
of
(ZoneOffset offset) 获得具有固定区域规则的 ZoneRules 实例。static ZoneRules
of
(ZoneOffset baseStandardOffset, ZoneOffset baseWallOffset, List<ZoneOffsetTransition> standardOffsetTransitionList, List<ZoneOffsetTransition> transitionList, List<ZoneOffsetTransitionRule> lastRules) 获得 ZoneRules 的实例。previousTransition
(Instant instant) 获取指定时刻之前的上一个转换。toString()
返回描述此对象的字符串。
-
方法详情
-
of
public static ZoneRules of(ZoneOffset baseStandardOffset, ZoneOffset baseWallOffset, List <ZoneOffsetTransition > standardOffsetTransitionList, List <ZoneOffsetTransition > transitionList, List <ZoneOffsetTransitionRule > lastRules) 获得 ZoneRules 的实例。- 参数:
baseStandardOffset
- 在设置法律规则之前使用的标准偏移量,不为空baseWallOffset
- 在设置法律规则之前使用的墙偏移量,不为空standardOffsetTransitionList
- 标准偏移量的更改列表,不为空transitionList
- 转换列表,不为空lastRules
- 重复出现的最后一条规则,大小为 16 或更小,不为空- 返回:
- 区域规则,不为空
-
of
获得具有固定区域规则的 ZoneRules 实例。- 参数:
offset
- 此固定区域规则所基于的偏移量,不为空- 返回:
- 区域规则,不为空
- 参见:
-
isFixedOffset
public boolean isFixedOffset()区域规则的检查是固定的,因此偏移量永远不会变化。- 返回:
- 如果时区是固定的并且偏移量永远不会改变,则为真
-
getOffset
获取这些规则中指定时刻适用的偏移量。从瞬间到偏移量的映射很简单,每个瞬间只有一个有效偏移量。此方法返回该偏移量。
- 参数:
instant
- 查找偏移量的时刻,不为空,但如果规则对所有时刻都有一个偏移量,则可以忽略空值- 返回:
- 偏移量,不为空
-
getOffset
为这些规则中指定的本地日期时间获取合适的偏移量。从本地日期时间到偏移量的映射并不简单。有以下三种情况:
- 正常,具有一个有效偏移量。对于一年中的绝大多数时间,正常情况适用,本地日期时间有一个有效的偏移量。
- 间隙,有效偏移量为零。这通常是由于春季夏令时从“冬季”变为“夏季”而导致时钟向前跳动的时候。在间隙中,存在没有有效偏移量的本地日期时间值。
- 重叠,具有两个有效偏移量。这是通常由于秋季夏令时从“夏季”变为“冬季”而导致时钟拨回的时间。在重叠中,存在具有两个有效偏移量的本地日期时间值。
由于在 Gap 和 Overlap 的情况下,返回的偏移量是“最佳”值,而不是“正确”值,因此应谨慎对待。关心正确偏移量的应用程序应结合使用此方法
getValidOffsets(LocalDateTime)
和getTransition(LocalDateTime)
。- 参数:
localDateTime
- 要查询的本地日期时间,不为 null,但如果规则对所有时刻都有一个偏移量,则可以忽略 null- 返回:
- 本地日期时间的最佳可用偏移量,不为空
-
getValidOffsets
获取在这些规则中指定的本地日期时间适用的偏移量。从本地日期时间到偏移量的映射并不简单。有以下三种情况:
- 正常,具有一个有效偏移量。对于一年中的绝大多数时间,正常情况适用,本地日期时间有一个有效的偏移量。
- 间隙,有效偏移量为零。这通常是由于春季夏令时从“冬季”变为“夏季”而导致时钟向前跳动的时候。在间隙中,存在没有有效偏移量的本地日期时间值。
- 重叠,具有两个有效偏移量。这是通常由于秋季夏令时从“夏季”变为“冬季”而导致时钟拨回的时间。在重叠中,存在具有两个有效偏移量的本地日期时间值。
有多种方法可以处理来自
LocalDateTime
的转换。使用这种方法的一种技术是:List<ZoneOffset> validOffsets = rules.getValidOffsets(localDT); if (validOffsets.size() == 1) { // Normal case: only one valid offset zoneOffset = validOffsets.get(0); } else { // Gap or Overlap: determine what to do from transition (which will be non-null) ZoneOffsetTransition trans = rules.getTransition(localDT); }
理论上,可能存在两个以上的有效偏移量。如果时钟快速连续地拨回不止一次,就会发生这种情况。这在时区历史上从未发生过,因此没有特殊处理。但是,如果发生这种情况,则该列表将返回 2 个以上的条目。
- 参数:
localDateTime
- 查询有效偏移量的本地日期时间,不为空,但如果规则对所有时刻都有一个偏移量,则可以忽略空值- 返回:
- 有效偏移量列表,可能是不可变的,不为空
-
getTransition
获取适用于这些规则中指定本地日期时间的偏移转换。从本地日期时间到偏移量的映射并不简单。有以下三种情况:
- 正常,具有一个有效偏移量。对于一年中的绝大多数时间,正常情况适用,本地日期时间有一个有效的偏移量。
- 间隙,有效偏移量为零。这通常是由于春季夏令时从“冬季”变为“夏季”而导致时钟向前跳动的时候。在间隙中,存在没有有效偏移量的本地日期时间值。
- 重叠,具有两个有效偏移量。这是通常由于秋季夏令时从“夏季”变为“冬季”而导致时钟拨回的时间。在重叠中,存在具有两个有效偏移量的本地日期时间值。
有多种方法可以处理来自
LocalDateTime
的转换。使用这种方法的一种技术是:ZoneOffsetTransition trans = rules.getTransition(localDT); if (trans != null) { // Gap or Overlap: determine what to do from transition } else { // Normal case: only one valid offset zoneOffset = rule.getOffset(localDT); }
- 参数:
localDateTime
- 查询偏移量转换的本地日期时间,不为空,但如果规则对所有时刻都有一个偏移量,则可以忽略空值- 返回:
- 偏移量转换,如果本地日期时间不在转换中则为 null
-
getStandardOffset
获取此区域中指定时刻的标准偏移量。这提供了对标准偏移如何随时间变化的历史信息的访问。标准偏移量是应用任何夏令时之前的偏移量。这通常是冬季适用的偏移量。
- 参数:
instant
- 查找偏移信息的时刻,不为空,但如果规则对所有时刻都有一个偏移量,则可以忽略空- 返回:
- 标准偏移量,不为空
-
getDaylightSavings
获取此区域中指定时刻使用的夏令时量。这提供了对有关夏令时的数量如何随时间变化的历史信息的访问。这是标准偏移量和实际偏移量之间的差异。通常,该量在冬季为零,在夏季为一小时。时区是基于秒的,因此持续时间的纳秒部分将为零。
- 参数:
instant
- 查找夏令时的时刻,不为空,但如果规则对所有时刻都有一个偏移量,则可以忽略空- 返回:
- 标准偏移量和实际偏移量之间的差异,不为空
-
isDaylightSavings
- 参数:
instant
- 查找偏移信息的时刻,不为空,但如果规则对所有时刻都有一个偏移量,则可以忽略空- 返回:
- 标准偏移量,不为空
-
isValidOffset
检查偏移日期时间是否对这些规则有效。要有效,本地日期时间不得处于间隙中,并且偏移量必须与有效偏移量之一匹配。
此默认实现检查
getValidOffsets(java.time.LocalDateTime)
是否包含指定的偏移量。- 参数:
localDateTime
- 要检查的日期时间,不为 null,但如果规则对所有时刻都有一个偏移量,则可以忽略 nulloffset
- 要检查的偏移量,null 返回 false- 返回:
- 如果偏移日期时间对这些规则有效,则为真
-
nextTransition
获取指定时刻后的下一个转换。这将返回指定时刻后下一个转换的详细信息。例如,如果瞬间表示应用“夏季”夏令时的点,则该方法将返回转换到下一个“冬季”时间。
- 参数:
instant
- 之后获得下一个转换的时刻,不为空,但如果规则对所有时刻都有一个偏移量,则可以忽略空- 返回:
- 指定时刻之后的下一个转换,如果这是在最后一个转换之后,则为 null
-
previousTransition
获取指定时刻之前的上一个转换。这将返回指定时刻之前的先前转换的详细信息。例如,如果瞬间表示应用“夏季”夏令时的点,则该方法将返回从前一个“冬季”时间的转换。
- 参数:
instant
- 之后获得前一个转换的瞬间,不为空,但如果规则对所有瞬间都有一个偏移量,则可以忽略空- 返回:
- 指定时刻之前的上一个转换,如果这是在第一个转换之前,则为 null
-
getTransitions
获取完全定义的转换的完整列表。此规则实例的完整转换集由此方法和
getTransitionRules()
定义。此方法返回那些已完全定义的转换。这些通常是历史性的,但也可能是未来的。对于固定偏移量规则和任何只有一个偏移量的时区,该列表将为空。如果转换规则未知,该列表也将为空。
- 返回:
- 完全定义的转换的不可变列表,不为空
-
getTransitionRules
获取超出转换列表中定义的年份的转换规则列表。此规则实例的完整转换集由此方法和
getTransitions()
定义。此方法返回ZoneOffsetTransitionRule
的实例,这些实例定义了何时发生转换的算法。对于任何给定的
ZoneRules
,此list包含超出已完全定义的年份的过渡规则。这些规则通常是指未来的夏令时规则更改。如果该区域定义了未来的夏令时,那么该列表通常大小为 2,并包含有关进入和退出夏令时的信息。如果该区域没有夏令时,或者有关未来更改的信息不确定,则该列表将为空。
对于固定偏移量规则和没有夏令时的任何时区,该列表将为空。如果转换规则未知,该列表也将为空。
- 返回:
- 不可变的转换规则列表,不为空
-
equals
检查这组规则是否与另一组相同。如果两个规则集对于任何给定的输入时刻或本地日期时间总是产生相同的输出,则它们是相等的。来自两个不同组的规则可能会返回 false,即使它们实际上是相同的。
这个定义应该导致实现比较它们的整个状态。
-
hashCode
public int hashCode()给定#equals
的定义,返回合适的哈希码。 -
toString
返回描述此对象的字符串。
-