- java.lang.Object
-
- java.time.ZoneId
-
- java.time.ZoneOffset
-
- All Implemented Interfaces:
-
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)
进行比较。 实现可能会选择缓存某些常见的偏移量,但是应用程序不能依赖这种缓存。这是一个value-based类; 在
ZoneOffset
实例上使用身份敏感操作(包括引用等式(==
),身份哈希码或同步)可能会有不可预测的结果,应该避免。equals
方法应用于比较。- 实现要求:
- 这个类是不可变的和线程安全的。
- 从以下版本开始:
- 1.8
- 另请参见:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field 描述 static ZoneOffset
MAX
最大支持偏移量的常数。static ZoneOffset
MIN
最小支持偏移量的常数。static ZoneOffset
UTC
UTC的时区偏移量,ID为“Z”。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 Temporal
adjustInto(Temporal temporal)
调整指定的时间对象与此对象的偏移量相同。int
compareTo(ZoneOffset other)
将此偏移量与其他偏移量按降序进行比较。boolean
equals(Object obj)
检查这个偏移量是否等于另一个偏移量。static ZoneOffset
from(TemporalAccessor temporal)
从时间对象获取ZoneOffset
的实例。int
get(TemporalField field)
从该偏移量获取指定字段的值作为int
。String
getId()
获取标准化区域偏移ID。long
getLong(TemporalField field)
从该偏移量获取指定字段的值作为long
。ZoneRules
getRules()
获取相关的时区规则。int
getTotalSeconds()
获取总区域偏移量(以秒为单位)。int
hashCode()
这个偏移的哈希码。boolean
isSupported(TemporalField field)
检查指定的字段是否受支持。static ZoneOffset
of(String offsetId)
使用ID获取ZoneOffset
的实例。static ZoneOffset
ofHours(int hours)
获取ZoneOffset
的实例,使用小时数的偏移量。static ZoneOffset
ofHoursMinutes(int hours, int minutes)
获取ZoneOffset
的实例,以小时和分钟为ZoneOffset
使用偏移量。static ZoneOffset
ofHoursMinutesSeconds(int hours, int minutes, int seconds)
获取ZoneOffset
的实例,使用小时,分钟和秒的偏移量。static ZoneOffset
ofTotalSeconds(int totalSeconds)
获取ZoneOffset
的实例,指定总偏移量(以秒为单位)<R> R
query(TemporalQuery<R> query)
使用指定的查询查询此偏移量。ValueRange
range(TemporalField field)
获取指定字段的有效值的范围。String
toString()
使用归一化ID将此偏移量输出为String
。-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from class java.time.ZoneId
getAvailableZoneIds, getDisplayName, normalized, of, ofOffset, systemDefault
-
-
-
-
字段详细信息
-
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)
-
-
getRules
public ZoneRules getRules()
获取相关的时区规则。查询时,规则将始终返回此偏移量。 实现类是不可变的,线程安全的和可序列化的。
-
isSupported
public boolean isSupported(TemporalField field)
检查指定的字段是否受支持。这将检查是否可以查询指定字段的偏移量。 如果是false,那么调用
range
和get
方法会抛出异常。如果该字段是
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
- 如果发生数字溢出(由查询定义)
-
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 - 结果
- 调整对象,不为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的比较。
- 重写:
-
equals
在ZoneId
- 参数
-
obj
- 要检查的对象,null返回false - 结果
- 如果这等于其他偏移量,则为true
- 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
这个偏移的哈希码。- 重写:
-
hashCode
在ZoneId
- 结果
- 一个合适的哈希码
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
-