- 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 ZoneOffsetMAX最大支持偏移量的常数。static ZoneOffsetMIN最小支持偏移量的常数。static ZoneOffsetUTCUTC的时区偏移量,ID为“Z”。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 TemporaladjustInto(Temporal temporal)调整指定的时间对象与此对象的偏移量相同。intcompareTo(ZoneOffset other)将此偏移量与其他偏移量按降序进行比较。booleanequals(Object obj)检查这个偏移量是否等于另一个偏移量。static ZoneOffsetfrom(TemporalAccessor temporal)从时间对象获取ZoneOffset的实例。intget(TemporalField field)从该偏移量获取指定字段的值作为int。StringgetId()获取标准化区域偏移ID。longgetLong(TemporalField field)从该偏移量获取指定字段的值作为long。ZoneRulesgetRules()获取相关的时区规则。intgetTotalSeconds()获取总区域偏移量(以秒为单位)。inthashCode()这个偏移的哈希码。booleanisSupported(TemporalField field)检查指定的字段是否受支持。static ZoneOffsetof(String offsetId)使用ID获取ZoneOffset的实例。static ZoneOffsetofHours(int hours)获取ZoneOffset的实例,使用小时数的偏移量。static ZoneOffsetofHoursMinutes(int hours, int minutes)获取ZoneOffset的实例,以小时和分钟为ZoneOffset使用偏移量。static ZoneOffsetofHoursMinutesSeconds(int hours, int minutes, int seconds)获取ZoneOffset的实例,使用小时,分钟和秒的偏移量。static ZoneOffsetofTotalSeconds(int totalSeconds)获取ZoneOffset的实例,指定总偏移量(以秒为单位)<R> Rquery(TemporalQuery<R> query)使用指定的查询查询此偏移量。ValueRangerange(TemporalField field)获取指定字段的有效值的范围。StringtoString()使用归一化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)
-
-