- java.lang.Object
-
- java.time.zone.ZoneRules
-
- All Implemented Interfaces:
-
Serializable
public final class ZoneRules extends Object implements Serializable
定义区域偏移对于单个时区的变化的规则。规则模拟了时区的所有历史和未来转型。
ZoneOffsetTransition
用于已知的转换,通常是历史记录。ZoneOffsetTransitionRule
用于基于算法结果的未来转换。规则通过
ZoneRulesProvider
使用ZoneId
加载。 相同的规则可以在多个区域ID之间内部共享。序列化
ZoneRules
的实例将存储整套规则。 它不存储区域ID,因为它不是此对象的状态的一部分。规则实现可以存储或不存储关于历史和未来转换的完整信息,并且存储的信息与提供给规则提供者的实现一样准确。 应用程序应将提供的数据视为可用于执行此规则的最佳信息。
- 实现要求:
- 这个类是不可变的和线程安全的。
- 从以下版本开始:
- 1.8
- 另请参见:
- Serialized Form
-
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 boolean
equals(Object otherRules)
检查这套规则是否等于另一个。Duration
getDaylightSavings(Instant instant)
获取此区域中指定时间使用的夏令时数量。ZoneOffset
getOffset(Instant instant)
获得这些规则中指定时刻适用的偏移量。ZoneOffset
getOffset(LocalDateTime localDateTime)
在这些规则中为指定的本地日期时间获取适当的偏移量。ZoneOffset
getStandardOffset(Instant instant)
获取此区域中指定时刻的标准偏移量。ZoneOffsetTransition
getTransition(LocalDateTime localDateTime)
在这些规则中获取在指定的本地日期时间中适用的偏移量转换。List<ZoneOffsetTransitionRule>
getTransitionRules()
获得过渡规则列表,超出转换列表中定义的年限。List<ZoneOffsetTransition>
getTransitions()
获取完全定义的转换的完整列表。List<ZoneOffset>
getValidOffsets(LocalDateTime localDateTime)
在这些规则中获取在指定的本地日期时间中适用的偏移量。int
hashCode()
给出给定#equals
的定义的合适的哈希码。boolean
isDaylightSavings(Instant instant)
检查指定的时间是否是夏令时。boolean
isFixedOffset()
检查区域规则是固定的,使得偏移量不变。boolean
isValidOffset(LocalDateTime localDateTime, ZoneOffset offset)
检查偏移日期时间对于这些规则是否有效。ZoneOffsetTransition
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的实例。ZoneOffsetTransition
previousTransition(Instant instant)
获取指定时刻之前的转换。String
toString()
返回描述此对象的字符串。
-
-
-
方法详细信息
-
of
public static ZoneRules of(ZoneOffset baseStandardOffset, ZoneOffset baseWallOffset, List<ZoneOffsetTransition> standardOffsetTransitionList, List<ZoneOffsetTransition> transitionList, List<ZoneOffsetTransitionRule> lastRules)
获取ZoneRules的实例。- 参数
-
baseStandardOffset
- 设置法定规则之前使用的标准偏移量,不为空 -
baseWallOffset
- 设置法定规则之前使用的墙偏移量,不为空 -
standardOffsetTransitionList
- 标准偏移量的更改列表,不为空 -
transitionList
- 转换列表,不为null -
lastRules
- 重复的最后一个规则,大小16或更小,不为null - 结果
- 区域规则,不为空
-
of
public static ZoneRules of(ZoneOffset offset)
获取具有固定区域规则的ZoneRules实例。- 参数
-
offset
- 该固定区域规则所基于的偏移量,不为null - 结果
- 区域规则,不为空
- 另请参见:
-
isFixedOffset()
-
isFixedOffset
public boolean isFixedOffset()
检查区域规则是固定的,使得偏移量不变。- 结果
- 如果时区是固定的并且偏移量永远不会改变,则为真
-
getOffset
public ZoneOffset getOffset(Instant instant)
获得这些规则中指定时刻适用的偏移量。从瞬间到偏移的映射很简单,每个时刻只有一个有效的偏移量。 此方法返回该偏移量。
- 参数
-
instant
- 找到偏移量的时间,不为null,但如果规则对于所有瞬间都有单个偏移量,则可以忽略null - 结果
- 偏移量,不为空
-
getOffset
public ZoneOffset getOffset(LocalDateTime localDateTime)
在这些规则中为指定的本地日期时间获取适当的偏移量。从本地日期时间到偏移量的映射并不简单。 有三种情况:
- 正常,有一个有效的偏移。 在一年的绝大多数情况下,正常情况适用于当地日期时间单一有效抵消。
- 间隙,零有效偏移。 这是由于春季夏令时从“冬季”变为“夏季”,时钟向前倾斜。 在间隙中,存在没有有效偏移量的本地日期时间值。
- 重叠,有两个有效的偏移。 这是由于秋季夏令时间从“夏季”变为“冬季”而将时钟倒退。 在重叠中,存在具有两个有效偏移量的本地日期时间值。
由于在间隙和重叠的情况下,返回的偏移量是“最佳”值,而不是“正确”值,因此应小心对待。 关心正确偏移的应用程序应使用此方法
getValidOffsets(LocalDateTime)
和getTransition(LocalDateTime)
的组合。- 参数
-
localDateTime
- 查询的本地日期时间,不为空,但是如果规则对于所有瞬间都有单个偏移量,则可以忽略null - 结果
- 当地日期时间的最佳可用偏移量,不为空
-
getValidOffsets
public List<ZoneOffset> getValidOffsets(LocalDateTime localDateTime)
在这些规则中获取在指定的本地日期时间中适用的偏移量。从本地日期时间到偏移量的映射并不简单。 有三种情况:
- 正常,有一个有效的偏移。 在一年的绝大多数情况下,正常情况适用于当地日期时间单一有效抵消。
- 间隙,零有效偏移。 这是由于春季夏令时从“冬季”变为“夏季”,时钟向前倾斜。 在间隙中,存在没有有效偏移量的本地日期时间值。
- 重叠,有两个有效的偏移。 这是由于秋季夏令时间从“夏季”变为“冬季”而将时钟倒退。 在重叠中,存在具有两个有效偏移量的本地日期时间值。
有多种方法来处理来自一个
LocalDateTime
的转换。 使用这种方法的一种技术是:List<ZoneOffset> validOffsets = rules.getOffset(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); }
理论上说,有可能有两个以上的有效偏移量。 如果时钟要快速连续放回不止一次,会发生这种情况。 这在时区的历史上从来没有发生过,因此没有特别的处理。 但是,如果发生这种情况,列表将返回两个以上的条目。
- 参数
-
localDateTime
- 查询有效偏移量的本地日期时间,不为null,但如果规则对于所有瞬间具有单个偏移量,则可以忽略null - 结果
- 有效偏移的列表可能是不可变的,不为空
-
getTransition
public ZoneOffsetTransition getTransition(LocalDateTime localDateTime)
在这些规则中获取在指定的本地日期时间中适用的偏移量转换。从本地日期时间到偏移量的映射并不简单。 有三种情况:
- 正常,有一个有效的偏移。 在一年的绝大多数情况下,正常情况适用于当地日期时间单一有效抵消。
- 间隙,零有效偏移。 这是由于春季夏令时从“冬季”变为“夏季”,时钟向前倾斜。 在间隙中,存在没有有效偏移量的本地日期时间值。
- 重叠,有两个有效的偏移。 这是由于秋季夏令时间从“夏季”变为“冬季”而将时钟倒退。 在重叠中,存在具有两个有效偏移量的本地日期时间值。
有多种方法来处理从
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 - 结果
- 偏移转换,如果本地日期时间不在转换中则为null
-
getStandardOffset
public ZoneOffset getStandardOffset(Instant instant)
获取此区域中指定时刻的标准偏移量。这提供了有关标准偏移量随时间变化的历史信息。 标准偏移量是在应用任何夏令时之前的偏移量。 这通常是冬季适用的偏移。
- 参数
-
instant
- 如果规则对于所有瞬间都有单个偏移,则可以忽略找到偏移量信息的时间,而不是null,但是null可以被忽略 - 结果
- 标准偏移,不为空
-
getDaylightSavings
public Duration getDaylightSavings(Instant instant)
获取此区域中指定时间使用的夏令时数量。这提供了有关夏令时数随时间变化的历史信息。 这是标准偏移和实际偏移之间的差异。 通常在冬天和夏天一个小时的数量是零。 时区是次要的,所以持续时间的纳秒部分将为零。
- 参数
-
instant
- 找到夏令时的时间,不为null,但是如果规则对于所有瞬间都有单个偏移量,则可以忽略null - 结果
- 标准差和实际偏差之间的差异,不为零
-
isDaylightSavings
public boolean isDaylightSavings(Instant instant)
- 参数
-
instant
- 找到偏移量信息的时间,不为空,但是如果规则对于所有瞬间都有单个偏移量,则可以忽略null - 结果
- 标准偏移,不为空
-
isValidOffset
public boolean isValidOffset(LocalDateTime localDateTime, ZoneOffset offset)
检查偏移日期时间对于这些规则是否有效。为了有效,本地日期时间不能在间隙中,偏移量必须与有效偏移之一匹配。
此默认实现检查
getValidOffsets(java.time.LocalDateTime)
是否包含指定的偏移量。- 参数
-
localDateTime
- 检查的日期时间,不为null,但是如果规则对于所有瞬间具有单个偏移量,则可以忽略null -
offset
- 要检查的偏移量,null返回false - 结果
- 如果偏移日期时间对这些规则有效,则为true
-
nextTransition
public ZoneOffsetTransition nextTransition(Instant instant)
在指定的时刻之后获取下一个转换。这将返回指定时间后的下一个转换的详细信息。 例如,如果瞬间表示“夏季”夏令时适用的点,则该方法将返回到下一个“冬季”时间的过渡。
- 参数
-
instant
- 即时获取下一个转换,不为null,但是如果规则对于所有瞬间都有单个偏移量,则可以忽略null - 结果
- 在指定的时间之后的下一个转换,如果这是在最后一个转换之后,则为null
-
previousTransition
public ZoneOffsetTransition previousTransition(Instant instant)
获取指定时刻之前的转换。这将在指定时刻之前返回上一个转换的详细信息。 例如,如果瞬间表示“夏季”夏令时适用的点,则该方法将返回从上一个“冬季”时间过渡。
- 参数
-
instant
- 如果规则对于所有时刻都有一个偏移量,则可以忽略之前的转换,而不是null,但是null可能会被忽略 - 结果
- 之前的转换在指定的时间之前,如果这是在第一次转换之前,则为null
-
getTransitions
public List<ZoneOffsetTransition> getTransitions()
获取完全定义的转换的完整列表。该规则实例的完整转换集由此方法和
getTransitionRules()
定义。 此方法返回已完全定义的转换。 这些通常是历史的,但可能在将来。对于固定的偏移量规则以及只有一次偏移量的任何时区,列表将为空。 如果转换规则未知,则列表也将为空。
- 结果
- 完全定义的转换的不可变列表,不为null
-
getTransitionRules
public List<ZoneOffsetTransitionRule> getTransitionRules()
获得过渡规则列表,超出转换列表中定义的年限。此规则实例的完整转换集由此方法和
getTransitions()
定义。 此方法返回ZoneOffsetTransitionRule
的实例,该实例定义了何时发生转换的算法。对于任何给定的
ZoneRules
,该列表包含已经完全定义的那些年以后的转换规则。 这些规则通常是指未来的夏令时规则更改。如果该区域将来将定义夏令时,那么列表通常大小为2,并保存有关进入和退出夏令时的信息。 如果该区域没有夏令时,或有关未来更改的信息不确定,则列表将为空。
对于固定的偏移规则和没有夏令时的任何时区,列表将为空。 如果转换规则未知,则列表也将为空。
- 结果
- 一个不可变的过渡规则列表,不为空
-
equals
public boolean equals(Object otherRules)
检查这套规则是否等于另一个。如果任何给定的输入即时或本地日期时间总是导致相同的输出,两个规则集是相等的。 来自两个不同群组的规则可能会返回假,即使它们实际上相同。
这个定义应该导致比较他们整个状态的实现。
- 重写:
-
equals
在Object
- 参数
-
otherRules
- 其他规则,null返回false - 结果
- 如果此规则与指定的规则相同,则为true
- 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
给出给定的#equals
的合适的哈希码。- 重写:
-
hashCode
在Object
- 结果
- 哈希码
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
-