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