- 所有已实现的接口:
-
Serializable
这些规则模拟了时区的所有历史和未来转换。ZoneOffsetTransition
用于已知的转换,通常是历史性的。ZoneOffsetTransitionRule
用于基于算法结果的未来转换。
规则通过ZoneRulesProvider
使用ZoneId
加载。相同的规则可能在多个时区ID之间内部共享。
序列化ZoneRules
的实例将存储整套规则。它不会存储时区ID,因为它不是此对象状态的一部分。
规则实现可能会或可能不会存储有关历史和未来转换的完整信息,存储的信息仅与规则提供程序向实现提供的信息一样准确。应用程序应将提供的数据视为此规则实现的最佳信息。
- 实现要求:
- 此类是不可变的且线程安全的。
- 自 JDK 1.8 起:
- 1.8
- 另请参阅:
-
Method Summary
Modifier and TypeMethodDescriptionboolean
检查此规则集是否等于另一个规则集。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()
返回描述此对象的字符串。
-
Method Details
-
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()检查时区规则是否固定,即偏移量永远不会变化。- 返回:
- 如果时区是固定的且偏移量永远不会变化,则为true
-
getOffset
获取这些规则在指定时刻适用的偏移量。从时刻到偏移的映射很简单,每个时刻只有一个有效的偏移量。此方法返回该偏移量。
- 参数:
-
instant
- 要查找偏移量的时刻,不能为空,但如果规则对所有时刻具有单个偏移量,则可以忽略null - 返回:
- 偏移量,不能为空
-
getOffset
获取这些规则中指定本地日期时间的合适偏移量。从本地日期时间到偏移的映射并不直接。有三种情况:
- 正常,有一个有效的偏移量。在大多数时间里,正常情况适用,即本地日期时间有一个有效的偏移量。
- 间隙,没有有效的偏移量。这是时钟向前跳跃的情况,通常是由于从“冬季”到“夏季”的春季夏令时变化。在间隙中,存在没有有效偏移量的本地日期时间值。
- 重叠,有两个有效的偏移量。这是时钟向后设置的情况,通常是由于从“夏季”到“冬季”的秋季夏令时变化。在重叠中,存在两个有效偏移量的本地日期时间值。
在间隙和重叠的情况下,返回的偏移量是“最佳”值,而不是“正确”值,应谨慎处理。关心正确偏移的应用程序应结合使用此方法、
getValidOffsets(LocalDateTime)
和getTransition(LocalDateTime)
。- 参数:
-
localDateTime
- 要查询的本地日期时间,不能为空,但如果规则对所有时刻具有单个偏移量,则可以忽略null - 返回:
- 本地日期时间的最佳可用偏移量,不能为空
-
getValidOffsets
获取这些规则中指定本地日期时间适用的偏移量。从本地日期时间到偏移的映射并不直接。有三种情况:
- 正常,有一个有效的偏移量。在大多数时间里,正常情况适用,即本地日期时间有一个有效的偏移量。
- 间隙,没有有效的偏移量。这是时钟向前跳跃的情况,通常是由于从“冬季”到“夏季”的春季夏令时变化。在间隙中,存在没有有效偏移量的本地日期时间值。
- 重叠,有两个有效的偏移量。这是时钟向后设置的情况,通常是由于从“夏季”到“冬季”的秋季夏令时变化。在重叠中,存在两个有效偏移量的本地日期时间值。
有各种方法可以处理从
LocalDateTime
的转换。使用此方法的一种技术可能是:List<ZoneOffset> validOffsets = rules.getValidOffsets(localDT); if (validOffsets.size() == 1) { // 正常情况:只有一个有效的偏移量 zoneOffset = validOffsets.get(0); } else { // 间隙或重叠:从转换中确定要执行的操作(将不为null) ZoneOffsetTransition trans = rules.getTransition(localDT); }
理论上,可能存在超过两个有效偏移量。如果时钟需要快速连续地后退多次,这将发生。这在时区历史中从未发生过,因此没有特殊处理。但是,如果发生这种情况,列表将返回超过2个条目。
- 参数:
-
localDateTime
- 要查询有效偏移量的本地日期时间,不能为空,但如果规则对所有时刻具有单个偏移量,则可以忽略null - 返回:
- 有效偏移量的列表,可能是不可变的,不能为空
-
getTransition
获取这些规则中指定本地日期时间适用的偏移转换。从本地日期时间到偏移的映射并不直接。有三种情况:
- 正常,有一个有效的偏移量。在大多数时间里,正常情况适用,即本地日期时间有一个有效的偏移量。
- 间隙,没有有效的偏移量。这是时钟向前跳跃的情况,通常是由于从“冬季”到“夏季”的春季夏令时变化。在间隙中,存在没有有效偏移量的本地日期时间值。
- 重叠,有两个有效的偏移量。这是时钟向后设置的情况,通常是由于从“夏季”到“冬季”的秋季夏令时变化。在重叠中,存在两个有效偏移量的本地日期时间值。
有各种方法可以处理从
LocalDateTime
的转换。使用此方法的一种技术可能是:ZoneOffsetTransition trans = rules.getTransition(localDT); if (trans != null) { // 间隙或重叠:从转换中确定要执行的操作 } else { // 正常情况:只有一个有效的偏移量 zoneOffset = rule.getOffset(localDT); }
- 参数:
-
localDateTime
- 要查询偏移转换的本地日期时间,不能为空,但如果规则对所有时刻具有单个偏移量,则可以忽略null - 返回:
- 偏移转换,如果本地日期时间不在转换中则为null
-
getStandardOffset
获取此时区在指定时刻的标准偏移量。这提供了有关标准偏移量随时间如何变化的历史信息。标准偏移量是在应用任何夏令时之前的偏移量。这通常是冬季适用的偏移量。
- 参数:
-
instant
- 要查找偏移信息的时刻,不能为空,但如果规则对所有时刻具有单个偏移量,则可以忽略null - 返回:
- 标准偏移量,不能为空
-
getDaylightSavings
获取此时区中指定时刻使用的夏令时量。这提供了关于夏令时量如何随时间变化的历史信息。这是标准偏移和实际偏移之间的差异。通常在冬季为零,在夏季为一小时。时区是基于秒的,因此持续时间的纳秒部分将为零。
- 参数:
-
instant
- 要查找夏令时的时刻,不能为空,但如果规则对所有时刻具有单个偏移量,则可以忽略空值 - 返回:
- 标准偏移和实际偏移之间的差异,不能为空
-
isDaylightSavings
- 参数:
-
instant
- 要查找偏移信息的时刻,不能为空,但如果规则对所有时刻具有单个偏移量,则可以忽略空值 - 返回:
- 标准偏移,不能为空
-
isValidOffset
检查这些规则的偏移日期时间是否有效。要有效,本地日期时间不能处于间隙中,偏移必须与有效偏移之一匹配。
此默认实现检查
getValidOffsets(java.time.LocalDateTime)
是否包含指定的偏移。- 参数:
-
localDateTime
- 要检查的日期时间,不能为空,但如果规则对所有时刻具有单个偏移量,则可以忽略空值 -
offset
- 要检查的偏移,空值返回false - 返回:
- 如果偏移日期时间对这些规则有效,则为true
-
nextTransition
获取指定时刻之后的下一个转换。这返回指定时刻之后的下一个转换的详细信息。例如,如果时刻表示应用“夏季”夏令时的点,则该方法将返回到下一个“冬季”时间的转换。
- 参数:
-
instant
- 要获取下一个转换的时刻,不能为空,但如果规则对所有时刻具有单个偏移量,则可以忽略空值 - 返回:
- 指定时刻之后的下一个转换,如果这在最后一个转换之后则为null
-
previousTransition
获取指定时刻之前的上一个转换。这返回指定时刻之前的上一个转换的详细信息。例如,如果时刻表示应用“夏季”夏令时的点,则该方法将返回到上一个“冬季”时间的转换。
- 参数:
-
instant
- 要获取上一个转换的时刻,不能为空,但如果规则对所有时刻具有单个偏移量,则可以忽略空值 - 返回:
- 指定时刻之前的上一个转换,如果这在第一个转换之前则为null
-
getTransitions
获取完全定义的转换的完整列表。此规则实例的完整转换集由此方法和
getTransitionRules()
定义。此方法返回那些已完全定义的转换。这些通常是历史性的,但也可能是未来的。对于固定偏移规则和任何只有单个偏移量的时区,列表将为空。如果转换规则未知,列表也将为空。
- 返回:
- 完全定义的转换的不可变列表,不能为空
-
getTransitionRules
获取超出转换列表中定义的年份的转换规则列表。此规则实例的完整转换集由此方法和
getTransitions()
定义。此方法返回定义转换将发生的算法的ZoneOffsetTransitionRule
实例。对于给定的
ZoneRules
,此列表包含超出已完全定义年份的转换规则。这些规则通常指未来夏令时规则更改。如果时区将来定义夏令时,则列表通常大小为两,并保存有关进入和退出夏令时的信息。如果时区没有夏令时,或者关于未来更改的信息不确定,则列表将为空。
对于固定偏移规则和任何没有夏令时的时区,列表将为空。如果转换规则未知,列表也将为空。
- 返回:
- 转换规则的不可变列表,不能为空
-
equals
检查此规则集是否等于另一个规则集。如果两个规则集对于任何给定的输入时刻或本地日期时间始终产生相同的输出,则两个规则集相等。来自两个不同组的规则可能返回false,即使它们实际上是相同的。
此定义应导致实现比较其整个状态。
-
hashCode
public int hashCode()给定#equals
的定义,返回适当的哈希码。 -
toString
返回描述此对象的字符串。
-