模块 java.base

类 ZoneRules

java.lang.Object
java.time.zone.ZoneRules
所有已实现的接口:
Serializable

public final class ZoneRules extends Object implements Serializable
定义单个时区的时区偏移量如何变化的规则。

这些规则模拟了一个时区的所有历史和未来转变。 ZoneOffsetTransition 用于已知的转换,通常是历史性的。 ZoneOffsetTransitionRule 用于基于算法结果的未来转换。

规则通过 ZoneRulesProvider 使用 ZoneId 加载。相同的规则可以在多个区域 ID 之间内部共享。

序列化 ZoneRules 的实例将存储整个规则集。它不存储区域 ID,因为它不是此对象状态的一部分。

规则实现可能会或可能不会存储有关历史和未来转换的完整信息,并且存储的信息仅与规则提供者提供给实现的信息一样准确。应用程序应将提供的数据视为代表可用于实现此规则的最佳信息。

实现要求:
这个类是不可变的和线程安全的。
自从:
1.8
参见:
  • 方法详情

    • 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

      public static ZoneRules  of(ZoneOffset  offset)
      获得具有固定区域规则的 ZoneRules 实例。
      参数:
      offset - 此固定区域规则所基于的偏移量,不为空
      返回:
      区域规则,不为空
      参见:
    • isFixedOffset

      public boolean isFixedOffset()
      区域规则的检查是固定的,因此偏移量永远不会变化。
      返回:
      如果时区是固定的并且偏移量永远不会改变,则为真
    • getOffset

      public ZoneOffset  getOffset(Instant  instant)
      获取这些规则中指定时刻适用的偏移量。

      从瞬间到偏移量的映射很简单,每个瞬间只有一个有效偏移量。此方法返回该偏移量。

      参数:
      instant - 查找偏移量的时刻,不为空,但如果规则对所有时刻都有一个偏移量,则可以忽略空值
      返回:
      偏移量,不为空
    • getOffset

      public ZoneOffset  getOffset(LocalDateTime  localDateTime)
      为这些规则中指定的本地日期时间获取合适的偏移量。

      从本地日期时间到偏移量的映射并不简单。有以下三种情况:

      • 正常,具有一个有效偏移量。对于一年中的绝大多数时间,正常情况适用,本地日期时间有一个有效的偏移量。
      • 间隙,有效偏移量为零。这通常是由于春季夏令时从“冬季”变为“夏季”而导致时钟向前跳动的时候。在间隙中,存在没有有效偏移量的本地日期时间值。
      • 重叠,具有两个有效偏移量。这是通常由于秋季夏令时从“夏季”变为“冬季”而导致时钟拨回的时间。在重叠中,存在具有两个有效偏移量的本地日期时间值。
      因此,对于任何给定的本地日期时间,可以有零个、一个或两个有效偏移量。此方法在 Normal 情况下返回单个偏移量,在 Gap 或 Overlap 情况下返回过渡前的偏移量。

      由于在 Gap 和 Overlap 的情况下,返回的偏移量是“最佳”值,而不是“正确”值,因此应谨慎对待。关心正确偏移量的应用程序应结合使用此方法 getValidOffsets(LocalDateTime) getTransition(LocalDateTime)

      参数:
      localDateTime - 要查询的本地日期时间,不为 null,但如果规则对所有时刻都有一个偏移量,则可以忽略 null
      返回:
      本地日期时间的最佳可用偏移量,不为空
    • getValidOffsets

      public List <ZoneOffset > getValidOffsets(LocalDateTime  localDateTime)
      获取在这些规则中指定的本地日期时间适用的偏移量。

      从本地日期时间到偏移量的映射并不简单。有以下三种情况:

      • 正常,具有一个有效偏移量。对于一年中的绝大多数时间,正常情况适用,本地日期时间有一个有效的偏移量。
      • 间隙,有效偏移量为零。这通常是由于春季夏令时从“冬季”变为“夏季”而导致时钟向前跳动的时候。在间隙中,存在没有有效偏移量的本地日期时间值。
      • 重叠,具有两个有效偏移量。这是通常由于秋季夏令时从“夏季”变为“冬季”而导致时钟拨回的时间。在重叠中,存在具有两个有效偏移量的本地日期时间值。
      因此,对于任何给定的本地日期时间,可以有零个、一个或两个有效偏移量。此方法返回有效偏移量列表,它是大小为 0、1 或 2 的列表。在有两个偏移量的情况下,较早的偏移量在索引 0 处返回,较晚的偏移量在索引 1 处返回。

      有多种方法可以处理来自 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

      public ZoneOffsetTransition  getTransition(LocalDateTime  localDateTime)
      获取适用于这些规则中指定本地日期时间的偏移转换。

      从本地日期时间到偏移量的映射并不简单。有以下三种情况:

      • 正常,具有一个有效偏移量。对于一年中的绝大多数时间,正常情况适用,本地日期时间有一个有效的偏移量。
      • 间隙,有效偏移量为零。这通常是由于春季夏令时从“冬季”变为“夏季”而导致时钟向前跳动的时候。在间隙中,存在没有有效偏移量的本地日期时间值。
      • 重叠,具有两个有效偏移量。这是通常由于秋季夏令时从“夏季”变为“冬季”而导致时钟拨回的时间。在重叠中,存在具有两个有效偏移量的本地日期时间值。
      转换用于对 Gap 或 Overlap 的情况进行建模。正常情况将返回 null。

      有多种方法可以处理来自 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

      public ZoneOffset  getStandardOffset(Instant  instant)
      获取此区域中指定时刻的标准偏移量。

      这提供了对标准偏移如何随时间变化的历史信息的访问。标准偏移量是应用任何夏令时之前的偏移量。这通常是冬季适用的偏移量。

      参数:
      instant - 查找偏移信息的时刻,不为空,但如果规则对所有时刻都有一个偏移量,则可以忽略空
      返回:
      标准偏移量,不为空
    • getDaylightSavings

      public Duration  getDaylightSavings(Instant  instant)
      获取此区域中指定时刻使用的夏令时量。

      这提供了对有关夏令时的数量如何随时间变化的历史信息的访问。这是标准偏移量和实际偏移量之间的差异。通常,该量在冬季为零,在夏季为一小时。时区是基于秒的,因此持续时间的纳秒部分将为零。

      此默认实现根据 actual standard 偏移计算持续时间。

      参数:
      instant - 查找夏令时的时刻,不为空,但如果规则对所有时刻都有一个偏移量,则可以忽略空
      返回:
      标准偏移量和实际偏移量之间的差异,不为空
    • isDaylightSavings

      public boolean isDaylightSavings(Instant  instant)
      检查指定的时刻是否处于夏令时。

      这将检查指定时刻的标准偏移量和实际偏移量是否相同。如果不是,则假定正在运行夏令时。

      此默认实现比较 actual standard 偏移量。

      参数:
      instant - 查找偏移信息的时刻,不为空,但如果规则对所有时刻都有一个偏移量,则可以忽略空
      返回:
      标准偏移量,不为空
    • isValidOffset

      public boolean isValidOffset(LocalDateTime  localDateTime, ZoneOffset  offset)
      检查偏移日期时间是否对这些规则有效。

      要有效,本地日期时间不得处于间隙中,并且偏移量必须与有效偏移量之一匹配。

      此默认实现检查 getValidOffsets(java.time.LocalDateTime) 是否包含指定的偏移量。

      参数:
      localDateTime - 要检查的日期时间,不为 null,但如果规则对所有时刻都有一个偏移量,则可以忽略 null
      offset - 要检查的偏移量,null 返回 false
      返回:
      如果偏移日期时间对这些规则有效,则为真
    • nextTransition

      public ZoneOffsetTransition  nextTransition(Instant  instant)
      获取指定时刻后的下一个转换。

      这将返回指定时刻后下一个转换的详细信息。例如,如果瞬间表示应用“夏季”夏令时的点,则该方法将返回转换到下一个“冬季”时间。

      参数:
      instant - 之后获得下一个转换的时刻,不为空,但如果规则对所有时刻都有一个偏移量,则可以忽略空
      返回:
      指定时刻之后的下一个转换,如果这是在最后一个转换之后,则为 null
    • previousTransition

      public ZoneOffsetTransition  previousTransition(Instant  instant)
      获取指定时刻之前的上一个转换。

      这将返回指定时刻之前的先前转换的详细信息。例如,如果瞬间表示应用“夏季”夏令时的点,则该方法将返回从前一个“冬季”时间的转换。

      参数:
      instant - 之后获得前一个转换的瞬间,不为空,但如果规则对所有瞬间都有一个偏移量,则可以忽略空
      返回:
      指定时刻之前的上一个转换,如果这是在第一个转换之前,则为 null
    • getTransitions

      public List <ZoneOffsetTransition > getTransitions()
      获取完全定义的转换的完整列表。

      此规则实例的完整转换集由此方法和 getTransitionRules() 定义。此方法返回那些已完全定义的转换。这些通常是历史性的,但也可能是未来的。

      对于固定偏移量规则和任何只有一个偏移量的时区,该列表将为空。如果转换规则未知,该列表也将为空。

      返回:
      完全定义的转换的不可变列表,不为空
    • getTransitionRules

      public List <ZoneOffsetTransitionRule > getTransitionRules()
      获取超出转换列表中定义的年份的转换规则列表。

      此规则实例的完整转换集由此方法和 getTransitions() 定义。此方法返回 ZoneOffsetTransitionRule 的实例,这些实例定义了何时发生转换的算法。

      对于任何给定的 ZoneRules ,此list包含超出已完全定义的年份的过渡规则。这些规则通常是指未来的夏令时规则更改。

      如果该区域定义了未来的夏令时,那么该列表通常大小为 2,并包含有关进入和退出夏令时的信息。如果该区域没有夏令时,或者有关未来更改的信息不确定,则该列表将为空。

      对于固定偏移量规则和没有夏令时的任何时区,该列表将为空。如果转换规则未知,该列表也将为空。

      返回:
      不可变的转换规则列表,不为空
    • equals

      public boolean equals(Object  otherRules)
      检查这组规则是否与另一组相同。

      如果两个规则集对于任何给定的输入时刻或本地日期时间总是产生相同的输出,则它们是相等的。来自两个不同组的规则可能会返回 false,即使它们实际上是相同的。

      这个定义应该导致实现比较它们的整个状态。

      重写:
      equals 在类 Object
      参数:
      otherRules - 其他规则,null 返回 false
      返回:
      如果此规则与指定的相同,则为真
      参见:
    • hashCode

      public int hashCode()
      给定 #equals 的定义,返回合适的哈希码。
      重写:
      hashCode 在类 Object
      返回:
      哈希码
      参见:
    • toString

      public String  toString()
      返回描述此对象的字符串。
      重写:
      toString 在类 Object
      返回:
      用于调试的字符串,不为空