Module  java.base
软件包  java.time

Class ZoneOffset

  • All Implemented Interfaces:
    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的实例,以小时和分钟为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的实例。

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

        A 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的实例,指定总偏移量(以秒为单位)

        偏移量必须在-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 - UTC(ISO-8601)
        • +hh:mm-hh:mm - 如果秒为零(ISO-8601)
        • +hh:mm:ss-hh:mm:ss - 如果秒不为零(不是ISO-8601)
        Specified by:
        getIdZoneId
        结果
        区域偏移ID,不为空
      • getRules

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

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

        Specified by:
        getRulesZoneId
        结果
        规则,不为空
      • isSupported

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

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

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

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

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

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

        范围对象表示字段的最小和最大有效值。 该偏移量用于提高返回范围的精度。 如果不可能返回范围,因为该字段不受支持或出于某种其他原因,则抛出异常。

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

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

        Specified by:
        range在接口 TemporalAccessor
        参数
        field - 查询范围的字段,不为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
        参数
        field - 要获取的字段,不为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
        参数
        field - 要获取的字段,不为null
        结果
        该字段的值
        异常
        DateTimeException - 如果无法获取该字段的值
        UnsupportedTemporalTypeException - 如果该字段不被支持
        ArithmeticException - 如果发生数字溢出
      • query

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

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

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

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

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

        这些偏移量按照它们在世界各地的同一时间发生的顺序进行比较。 因此, +10:00的抵消来自+10:00的偏移量+09:00 -18:00

        比较是“符合等于”,由Comparable定义。

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

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

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

        重写:
        equalsZoneId
        参数
        obj - 要检查的对象,null返回false
        结果
        如果这等于其他偏移量,则为true
        另请参见:
        Object.hashCode()HashMap
      • toString

        public String toString​()
        使用归一化ID将此偏移量输出为 String
        重写:
        toStringZoneId
        结果
        这个偏移的字符串表示,不为空