Module java.base
Package java.time

Class 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快一小时,在夏季快两小时。巴黎的ZoneId实例将引用两个ZoneOffset实例 - 冬季的+01:00实例和夏季的+02:00实例。

2008年,世界各地的时区偏移从-12:00延伸到+14:00。为了防止该范围被扩展而导致任何问题,但仍提供验证,偏移范围被限制在-18:00到18:00之间。

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

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

这是一个基于值的类;程序员应该将相等的实例视为可互换的,不应该使用实例进行同步,否则可能会导致不可预测的行为。例如,在将来的版本中,同步可能会失败。应该使用equals方法进行比较。

实现要求:
该类是不可变的且线程安全的。
自从:
1.8
参见:
  • Field Details

    • UTC

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

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

      public static final ZoneOffset MAX
      最大支持的偏移的常量。
  • Method Details

    • 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
      返回:
      时区偏移,不能为空
      抛出:
      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
      返回值:
      规则,不为null
    • isSupported

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

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

      如果字段是一个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,则在此处实现查询。支持的字段将返回适当的范围实例。所有其他ChronoField实例将抛出UnsupportedTemporalTypeException

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

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

      public int get(TemporalField field)
      int形式获取此偏移量的指定字段的值。

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

      如果字段是一个ChronoField,则在此处实现查询。 OFFSET_SECONDS字段返回偏移量的值。所有其他ChronoField实例将抛出UnsupportedTemporalTypeException

      如果字段不是ChronoField,则通过调用TemporalField.getFrom(TemporalAccessor)方法并将this作为参数传递来获取此方法的结果。是否可以获取值以及值代表什么由字段确定。

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

      public long getLong(TemporalField field)
      long形式获取此偏移量的指定字段的值。

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

      如果字段是一个ChronoField,则在此处实现查询。 OFFSET_SECONDS字段返回偏移量的值。所有其他ChronoField实例将抛出UnsupportedTemporalTypeException

      如果字段不是ChronoField,则通过调用TemporalField.getFrom(TemporalAccessor)方法并将this作为参数传递来获取此方法的结果。是否可以获取值以及值代表什么由字段确定。

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

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

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

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

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

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

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

      调整等同于使用Temporal.with(TemporalField, long)并将ChronoField.OFFSET_SECONDS作为字段进行调用。

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

         // 这两行是等效的,但建议使用第二种方法
         temporal = thisOffset.adjustInto(temporal);
         temporal = temporal.with(thisOffset);
       

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

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

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

      按照全球同一时间发生的相同时间顺序比较偏移量。因此,偏移量+10:00在偏移量+09:00之前,依此类推,直到-18:00

      比较是“与equals一致”的,如Comparable定义的。

      指定者:
      compareTo 在接口 Comparable<ZoneOffset>
      参数:
      other - 要比较的另一个日期,不能为空
      返回值:
      比较器值,如果此totalSeconds小于other的totalSeconds,则为负值,如果相等则为零,如果此totalSeconds大于other的totalSeconds则为正值
      抛出:
      NullPointerException - 如果other为null
    • equals

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

      比较基于偏移量的秒数。这相当于按ID进行比较。

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

      public int hashCode()
      此偏移量的哈希码。
      覆盖:
      hashCode 在类 ZoneId
      返回值:
      适当的哈希码
      参见:
    • toString

      public String toString()
      将此偏移量输出为一个String,使用规范化的ID。
      覆盖:
      toString 在类 ZoneId
      返回值:
      此偏移量的字符串表示,不能为空