模块  java.base
软件包  java.time

Class ZoneOffset

  • 实现的所有接口
    SerializableComparable<ZoneOffset>TemporalAccessorTemporalAdjuster

    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) 实现可以选择缓存某些常见的偏移,但是应用程序不能依赖于这种缓存。

    这是value-based班; ZoneOffset实例上使用身份敏感操作(包括引用相等( == ),标识哈希码或同步)可能会产生不可预测的结果,应该避免使用。 应使用equals方法进行比较。

    实现要求:
    这个类是不可变的和线程安全的。
    从以下版本开始:
    1.8
    另请参见:
    Serialized Form
    • 字段详细信息

      • 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,不为空
        结果
        zone-offset,not null
        异常
        DateTimeException - 如果偏移ID无效
      • ofHours

        public static ZoneOffset ofHours​(int hours)
        使用小时偏移量获得 ZoneOffset的实例。
        参数
        hours - 以小时为单位的时区偏移量,从-18到+18
        结果
        zone-offset,not null
        异常
        DateTimeException - 如果偏移量不在要求的范围内
      • ofHoursMinutes

        public static ZoneOffset ofHoursMinutes​(int hours,
                                                int minutes)
        使用小时和分钟的偏移量获得ZoneOffset的实例。

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

        参数
        hours - 以小时为单位的时区偏移量,从-18到+18
        minutes - 以分钟为单位的时区偏移量,从0到±59,符号匹配小时
        结果
        zone-offset,not null
        异常
        DateTimeException - 如果偏移量不在要求的范围内
      • ofHoursMinutesSeconds

        public static ZoneOffset ofHoursMinutesSeconds​(int hours,
                                                       int minutes,
                                                       int seconds)
        使用小时,分钟和秒的偏移量获得ZoneOffset的实例。

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

        参数
        hours - 以小时为单位的时区偏移,从-18到+18
        minutes - 以分钟为单位的时区偏移量,从0到±59,符号匹配小时和秒
        seconds - 以秒为单位的时区偏移量,从0到±59,符号匹配小时和分钟
        结果
        zone-offset,not null
        异常
        DateTimeException - 如果偏移量不在要求的范围内
      • from

        public static ZoneOffset from​(TemporalAccessor temporal)
        从时态对象获得ZoneOffset的实例。

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

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

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

        此方法匹配功能接口TemporalQuery的签名,允许通过方法引用ZoneOffset::from将其用作查询。

        参数
        temporal - 要转换的临时对象,而不是null
        结果
        zone-offset,not null
        异常
        DateTimeException - 如果无法转换为 ZoneOffset
      • ofTotalSeconds

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

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

        参数
        totalSeconds - 以秒为单位的总时区偏移量,从-64800到+64800
        结果
        ZoneOffset,不为null
        异常
        DateTimeException - 如果偏移量不在要求的范围内
      • getTotalSeconds

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

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

        结果
        以秒为单位的总区域偏移量
      • getId

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

        ID是偏移的标准ISO-8601格式字符串的微小变化。 有三种格式:

        • Z - for UTC(ISO-8601)
        • +hh:mm-hh:mm - 如果秒数为零(ISO-8601)
        • +hh:mm:ss-hh:mm:ss - 如果秒数不为零(不是ISO-8601)
        Specified by:
        getId在课程 ZoneId
        结果
        区域偏移ID,不为空
      • getRules

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

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

        Specified by:
        getRules在课程 ZoneId
        结果
        规则,不是空的
      • isSupported

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

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

        如果该字段是ChronoField则在此处实现查询。 OFFSET_SECONDS字段返回true。 所有其他ChronoField实例将返回false。

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

        Specified by:
        isSupported在界面 TemporalAccessor
        参数
        字段 - 要检查的字段,null返回false
        结果
        如果此偏移量支持该字段,则返回true,否则返回false
      • range

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

        范围对象表示字段的最小和最大有效值。 此偏移用于增强返回范围的准确性。 如果无法返回范围,因为不支持该字段或由于某些其他原因,将引发异常。

        如果该字段是ChronoField则在此处实现查询。 supported fields将返回适当的范围实例。 所有其他ChronoField实例将抛出UnsupportedTemporalTypeException

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

        Specified by:
        range在界面 TemporalAccessor
        参数
        字段 - 要查询范围的字段,而不是null
        结果
        字段的有效值范围,不为null
        异常
        DateTimeException - 如果无法获得该字段的范围
        UnsupportedTemporalTypeException - 如果不支持该字段
      • get

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

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

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

        如果该字段是不是一个ChronoField ,则此方法的结果是通过调用获得TemporalField.getFrom(TemporalAccessor)传递this作为参数。 是否可以获得该值以及该值表示的值由该字段确定。

        Specified by:
        get在界面 TemporalAccessor
        参数
        字段 - 要获取的字段,而不是null
        结果
        该字段的值
        异常
        DateTimeException - 如果无法获取该字段的值或该值超出该字段的有效值范围
        UnsupportedTemporalTypeException - 如果不支持该字段或值的范围超过 int
        ArithmeticException - 如果发生数字溢出
      • getLong

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

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

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

        如果该字段是不是一个ChronoField ,则此方法的结果是通过调用获得TemporalField.getFrom(TemporalAccessor)传递this作为参数。 是否可以获得该值以及该值表示的值由该字段确定。

        Specified by:
        getLong在界面 TemporalAccessor
        参数
        字段 - 要获取的字段,而不是null
        结果
        该字段的值
        异常
        DateTimeException - 如果无法获得该字段的值
        UnsupportedTemporalTypeException - 如果不支持该字段
        ArithmeticException - 如果发生数字溢出
      • query

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

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

        此方法的结果是通过调用获得TemporalQuery.queryFrom(TemporalAccessor)在经过指定的查询方法this作为参数。

        Specified by:
        query在界面 TemporalAccessor
        参数类型
        R - 结果的类型
        参数
        query - 要调用的查询,而不是null
        结果
        查询结果,可以返回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); 

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

        Specified by:
        adjustInto在界面 TemporalAdjuster
        参数
        temporal - 要调整的目标对象,而不是null
        结果
        调整后的对象,不为空
        异常
        DateTimeException - 如果无法进行调整
        ArithmeticException - 如果发生数字溢出
      • compareTo

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

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

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

        Specified by:
        compareTo在界面 Comparable<ZoneOffset>
        参数
        other - 要比较的其他日期,而不是null
        结果
        比较器值,如果更小则为负,如果更大则为正
        异常
        NullPointerException - 如果 other为空
      • equals

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

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

        重写:
        equals在课程 ZoneId
        参数
        obj - 要检查的对象,null返回false
        结果
        如果它等于另一个偏移量,则返回true
        另请参见:
        Object.hashCode()HashMap
      • toString

        public String toString()
        使用标准化ID将此偏移量输出为 String
        重写:
        toString in class ZoneId
        结果
        此偏移量的字符串表示形式,不为null