模块 java.base
 java.time

类 ZoneOffset

java.lang.Object
java.time.ZoneId
java.time.ZoneOffset
所有已实现的接口:
Serializable , Comparable<ZoneOffset> , TemporalAccessor , TemporalAdjuster

public final class ZoneOffset extends ZoneId implements TemporalAccessor , TemporalAdjuster , Comparable <ZoneOffset >, Serializable
与格林威治/UTC 的时区偏移量,例如 +02:00

时区偏移量是时区不同于格林威治/UTC 的时间量。这通常是固定的小时数和分钟数。

世界不同地区有不同的时区偏差。在 ZoneId 类中捕获了偏移量如何随地点和一年中的时间变化的规则。

例如,巴黎在冬季比格林威治/UTC 早一小时,在夏季比格林威治/UTC 早两个小时。巴黎的 ZoneId 实例将引用两个 ZoneOffset 实例 - 冬季的 +01:00 实例和夏季的 +02:00 实例。

2008 年,世界各地的时差从 -12:00 扩展到 +14:00。为了防止扩展该范围时出现任何问题,但仍提供验证,偏移范围限制在 -18:00 到 18:00 之间(含)。

此类设计用于 ISO 日历系统。小时、分钟和秒字段做出的假设对这些字段的标准 ISO 定义有效。此类可以与其他日历系统一起使用,前提是时间字段的定义与 ISO 日历系统的定义相匹配。

ZoneOffset 的实例必须使用 equals(java.lang.Object) 进行比较。实现可以选择缓存某些公共偏移量,但应用程序不得依赖此类缓存。

这是一个value-based类;程序员应该将 equal 的实例视为可互换的,并且不应使用实例进行同步,否则可能会发生不可预测的行为。例如,在未来的版本中,同步可能会失败。 equals 方法应该用于比较。

实现要求:
这个类是不可变的和线程安全的。
自从:
1.8
参见:
  • 字段详细信息

    • UTC

      public static final ZoneOffset  UTC
      UTC 的时区偏移量,ID 为“Z”。
    • MIN

      public static final ZoneOffset  MIN
      支持的最小偏移量的常量。
    • MAX

      public static final ZoneOffset  MAX
      支持的最大偏移量的常量。
  • 方法详情

    • of

      public static ZoneOffset  of(String  offsetId)
      使用 ID 获取 ZoneOffset 的实例。

      该方法解析一个ZoneOffset的字符串ID返回一个实例。解析接受 getId() 生成的所有格式,以及一些额外的格式:

      • Z - 对于 UTC
      • +h
      • +hh
      • +hh:mm
      • -hh:mm
      • +hhmm
      • -hhmm
      • +hh:mm:ss
      • -hh:mm:ss
      • +hhmmss
      • -hhmmss
      请注意,± 表示加号或减号。

      返回的偏移量的 ID 将被规范化为 getId() 描述的格式之一。

      支持的最大范围是从 +18:00 到 -18:00(含)。

      参数:
      offsetId - 偏移量 ID,不为空
      返回:
      区域偏移量,不为空
      抛出:
      DateTimeException - 如果偏移 ID 无效
    • ofHours

      public static ZoneOffset  ofHours(int hours)
      使用以小时为单位的偏移量获取 ZoneOffset 的实例。
      参数:
      hours - 以小时为单位的时区偏移量,从 -18 到 +18
      返回:
      区域偏移量,不为空
      抛出:
      DateTimeException - 如果偏移量不在要求的范围内
    • ofHoursMinutes

      public static ZoneOffset  ofHoursMinutes(int hours, int minutes)
      使用以小时和分钟为单位的偏移量获取 ZoneOffset 的实例。

      小时和分钟组件的符号必须匹配。因此,如果小时数为负数,则分钟数必须为负数或零。如果小时数为零,则分钟数可能为正数、负数或零。

      参数:
      hours - 以小时为单位的时区偏移量,从 -18 到 +18
      minutes - 以分钟为单位的时区偏移量,从 0 到 ±59,符号匹配小时
      返回:
      区域偏移量,不为空
      抛出:
      DateTimeException - 如果偏移量不在要求的范围内
    • ofHoursMinutesSeconds

      public static ZoneOffset  ofHoursMinutesSeconds(int hours, int minutes, int seconds)
      使用以小时、分钟和秒为单位的偏移量获取 ZoneOffset 的实例。

      小时、分钟和秒组件的符号必须匹配。因此,如果小时为负数,则分钟和秒数必须为负数或零。

      参数:
      hours - 以小时为单位的时区偏移量,从 -18 到 +18
      minutes - 以分钟为单位的时区偏移量,从 0 到 ±59,符号匹配小时和秒
      seconds - 以秒为单位的时区偏移量,从 0 到 ±59,符号匹配小时和分钟
      返回:
      区域偏移量,不为空
      抛出:
      DateTimeException - 如果偏移量不在要求的范围内
    • from

      public static ZoneOffset  from(TemporalAccessor  temporal)
      从时间对象中获取 ZoneOffset 的实例。

      这将根据指定的时间获得偏移量。 TemporalAccessor 表示一组任意的日期和时间信息,该工厂将其转换为 ZoneOffset 的一个实例。

      TemporalAccessor 代表某种形式的日期和时间信息。该工厂将任意时间对象转换为 ZoneOffset 的实例。

      转换使用 TemporalQueries.offset() 查询,它依赖于提取 OFFSET_SECONDS 字段。

      此方法与功能接口 TemporalQuery 的签名相匹配,允许它通过方法参考 ZoneOffset::from 用作查询。

      参数:
      temporal - 要转换的时间对象,不为空
      返回:
      区域偏移量,不为空
      抛出:
      DateTimeException - 如果无法转换为 ZoneOffset
    • ofTotalSeconds

      public static ZoneOffset  ofTotalSeconds(int totalSeconds)
      获取 ZoneOffset 的实例,以秒为单位指定总偏移量

      偏移量必须在 -18:00+18:00 范围内,对应于 -64800 到 +64800。

      参数:
      totalSeconds - 以秒为单位的总时区偏移量,从 -64800 到 +64800
      返回:
      ZoneOffset,不为空
      抛出:
      DateTimeException - 如果偏移量不在要求的范围内
    • getTotalSeconds

      public int getTotalSeconds()
      以秒为单位获取总区域偏移量。

      这是访问偏移量的主要方式。它返回小时、分钟和秒字段的总和作为可以添加到时间的单个偏移量。

      返回:
      以秒为单位的总区域偏移量
    • getId

      public String  getId()
      获取规范化区域偏移 ID。

      ID 与标准 ISO-8601 格式的偏移量字符串略有不同。共有三种格式:

      • Z - 用于 UTC (ISO-8601)
      • +hh:mm-hh:mm - 如果秒数为零 (ISO-8601)
      • +hh:mm:ss-hh:mm:ss - 如果秒数不为零(不是 ISO-8601)
      指定者:
      getId 在类 ZoneId
      返回:
      区域偏移 ID,不为空
    • getRules

      public ZoneRules  getRules()
      获取关联的时区规则。

      查询时,规则将始终返回此偏移量。实现类是不可变的、线程安全的和可序列化的。

      指定者:
      getRules 在类 ZoneId
      返回:
      规则,不为空
    • isSupported

      public boolean isSupported(TemporalField  field)
      检查是否支持指定的字段。

      这将检查是否可以为指定字段查询此偏移量。如果为 false,则调用 range get 方法将抛出异常。

      如果该字段是一个ChronoField 那么查询就在这里实现。 OFFSET_SECONDS 字段返回 true。所有其他 ChronoField 实例将返回 false。

      如果该字段不是 ChronoField ,则通过调用 TemporalField.isSupportedBy(TemporalAccessor) 传递 this 作为参数来获得此方法的结果。字段是否支持由字段决定。

      指定者:
      isSupported 在接口 TemporalAccessor
      参数:
      field - 要检查的字段,null 返回 false
      返回:
      如果此偏移量支持该字段,则为 true,否则为 false
    • range

      public ValueRange  range(TemporalField  field)
      获取指定字段的有效值范围。

      范围对象表示字段的最小和最大有效值。此偏移量用于提高返回范围的准确性。如果由于不支持该字段或其他原因而无法返回范围,则会抛出异常。

      如果该字段是一个ChronoField 那么查询就在这里实现。 supported fields 将返回适当的范围实例。所有其他 ChronoField 实例将抛出 UnsupportedTemporalTypeException

      如果该字段不是 ChronoField ,则通过调用 TemporalField.rangeRefinedBy(TemporalAccessor) 传递 this 作为参数来获得此方法的结果。能否获取范围由字段决定。

      指定者:
      range 在接口 TemporalAccessor
      参数:
      field - 查询范围的字段,不为空
      返回:
      该字段的有效值范围,不为空
      抛出:
      DateTimeException - 如果无法获得该字段的范围
      UnsupportedTemporalTypeException - 如果不支持该字段
    • get

      public int get(TemporalField  field)
      从此偏移量获取指定字段的值作为 int

      这将查询此偏移量以获取指定字段的值。返回值将始终在该字段的有效值范围内。如果由于不支持该字段或其他原因而无法返回该值,则会抛出异常。

      如果该字段是一个ChronoField 那么查询就在这里实现。 OFFSET_SECONDS 字段返回偏移量的值。所有其他 ChronoField 实例将抛出 UnsupportedTemporalTypeException

      如果该字段不是 ChronoField ,则通过调用 TemporalField.getFrom(TemporalAccessor) 传递 this 作为参数来获得此方法的结果。能否获取到该值,该值代表什么,由字段决定。

      指定者:
      get 在接口 TemporalAccessor
      参数:
      field - 要获取的字段,不为空
      返回:
      该字段的值
      抛出:
      DateTimeException - 如果无法获取该字段的值或该值超出该字段的有效值范围
      UnsupportedTemporalTypeException - 如果不支持该字段或值的范围超过 int
      ArithmeticException - 如果发生数字溢出
    • getLong

      public long getLong(TemporalField  field)
      从此偏移量获取指定字段的值作为 long

      这将查询此偏移量以获取指定字段的值。如果由于不支持该字段或其他原因而无法返回该值,则会抛出异常。

      如果该字段是一个ChronoField 那么查询就在这里实现。 OFFSET_SECONDS 字段返回偏移量的值。所有其他 ChronoField 实例将抛出 UnsupportedTemporalTypeException

      如果该字段不是 ChronoField ,则通过调用 TemporalField.getFrom(TemporalAccessor) 传递 this 作为参数来获得此方法的结果。能否获取到该值,该值代表什么,由字段决定。

      指定者:
      getLong 在接口 TemporalAccessor
      参数:
      field - 要获取的字段,不为空
      返回:
      该字段的值
      抛出:
      DateTimeException - 如果无法获得该字段的值
      UnsupportedTemporalTypeException - 如果不支持该字段
      ArithmeticException - 如果发生数字溢出
    • query

      public <R> R query(TemporalQuery <R> query)
      使用指定的查询查询此偏移量。

      这使用指定的查询策略对象查询此偏移量。 TemporalQuery 对象定义了用于获取结果的逻辑。阅读查询文档以了解此方法的结果。

      此方法的结果是通过对指定查询调用 TemporalQuery.queryFrom(TemporalAccessor) 方法并将 this 作为参数传递来获得的。

      指定者:
      query 在接口 TemporalAccessor
      类型参数:
      R - 结果的类型
      参数:
      query - 要调用的查询,不为空
      返回:
      查询结果,可能返回null(由查询定义)
      抛出:
      DateTimeException - 如果无法查询(由查询定义)
      ArithmeticException - 如果发生数字溢出(由查询定义)
    • adjustInto

      public Temporal  adjustInto(Temporal  temporal)
      调整指定的时间对象以与此对象具有相同的偏移量。

      这将返回一个与输入具有相同可观察类型的时间对象,偏移量更改为与此相同。

      调整相当于使用Temporal.with(TemporalField, long) 传递ChronoField.OFFSET_SECONDS 作为字段。

      在大多数情况下,使用 Temporal.with(TemporalAdjuster) 反转调用模式会更清楚:

        // these two lines are equivalent, but the second approach is recommended
        temporal = thisOffset.adjustInto(temporal);
        temporal = temporal.with(thisOffset);
       

      此实例是不可变的,不受此方法调用的影响。

      指定者:
      adjustInto 在接口 TemporalAdjuster
      参数:
      temporal - 要调整的目标对象,不为空
      返回:
      调整后的对象,不为空
      抛出:
      DateTimeException - 如果无法进行调整
      ArithmeticException - 如果发生数字溢出
    • compareTo

      public int compareTo(ZoneOffset  other)
      按降序将此偏移量与另一个偏移量进行比较。

      偏移量按照它们在一天中的同一时间在世界各地发生的顺序进行比较。因此,+10:00 的偏移量出现在 +09:00 的偏移量之前,依此类推直到 -18:00

      Comparable 所定义,比较是“与等于一致”。

      指定者:
      compareTo 在接口 Comparable<ZoneOffset>
      参数:
      other - 要比较的其他日期,不为空
      返回:
      比较值,小于则为负,大于则为正
      抛出:
      NullPointerException - 如果 other 为空
    • equals

      public boolean equals(Object  obj)
      检查此偏移量是否等于另一个偏移量。

      比较基于以秒为单位的偏移量。这相当于通过ID进行比较。

      重写:
      equals 在类 ZoneId
      参数:
      obj - 要检查的对象,null 返回 false
      返回:
      如果这等于另一个偏移量,则为真
      参见:
    • hashCode

      public int hashCode()
      此偏移量的哈希码。
      重写:
      hashCode 在类 ZoneId
      返回:
      合适的哈希码
      参见:
    • toString

      public String  toString()
      使用规范化 ID 将此偏移量输出为 String
      重写:
      toString 在类 ZoneId
      返回:
      此偏移量的字符串表示形式,不为空