- 所有已实现的接口:
-
Serializable
,Comparable<ZoneOffset>
,TemporalAccessor
,TemporalAdjuster
+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 Summary
Modifier and TypeFieldDescriptionstatic final ZoneOffset
最大支持的偏移的常量。static final ZoneOffset
最小支持的偏移的常量。static final ZoneOffset
UTC的时区偏移,ID为'Z'。 -
Method Summary
Modifier and TypeMethodDescriptionadjustInto
(Temporal temporal) 调整指定的时间对象,使其具有与此对象相同的偏移量。int
compareTo
(ZoneOffset other) 按降序比较此偏移与另一个偏移。boolean
检查此偏移是否等于另一个偏移。static ZoneOffset
from
(TemporalAccessor temporal) 从时间对象获取ZoneOffset
的实例。int
get
(TemporalField field) 以int
形式获取此偏移的指定字段的值。getId()
获取标准化的时区偏移ID。long
getLong
(TemporalField field) 以long
形式获取此偏移的指定字段的值。getRules()
获取关联的时区规则。int
获取以秒为单位的总时区偏移量。int
hashCode()
此偏移的哈希码。boolean
isSupported
(TemporalField field) 检查是否支持指定的字段。static ZoneOffset
使用ID获取ZoneOffset
的实例。static ZoneOffset
ofHours
(int hours) 使用小时偏移获取ZoneOffset
的实例。static ZoneOffset
ofHoursMinutes
(int hours, int minutes) 使用小时和分钟偏移获取ZoneOffset
的实例。static ZoneOffset
ofHoursMinutesSeconds
(int hours, int minutes, int seconds) 使用小时、分钟和秒偏移获取ZoneOffset
的实例。static ZoneOffset
ofTotalSeconds
(int totalSeconds) 指定以秒为单位的总偏移量获取ZoneOffset
的实例。<R> R
query
(TemporalQuery<R> query) 使用指定查询查询此偏移。range
(TemporalField field) 获取指定字段的有效值范围。toString()
使用标准化的ID将此偏移输出为String
。Methods declared in class java.time.ZoneId
getAvailableZoneIds, getDisplayName, normalized, of, ofOffset, systemDefault
-
Field Details
-
UTC
UTC的时区偏移,ID为'Z'。 -
MIN
最小支持的偏移的常量。 -
MAX
最大支持的偏移的常量。
-
-
Method Details
-
of
使用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
使用小时偏移获取ZoneOffset
的实例。- 参数:
-
hours
- 小时的时区偏移,从-18到+18 - 返回:
- 时区偏移,不能为空
- 抛出:
-
DateTimeException
- 如果偏移不在所需范围内
-
ofHoursMinutes
使用小时和分钟偏移获取ZoneOffset
的实例。小时和分钟组件的符号必须匹配。因此,如果小时为负数,则分钟必须为负数或零。如果小时为零,则分钟可以为正数、负数或零。
- 参数:
-
hours
- 小时的时区偏移,从-18到+18 -
minutes
- 分钟的时区偏移,从0到±59,符号与小时匹配 - 返回:
- 时区偏移,不能为空
- 抛出:
-
DateTimeException
- 如果偏移不在所需范围内
-
ofHoursMinutesSeconds
使用小时、分钟和秒偏移获取ZoneOffset
的实例。小时、分钟和秒组件的符号必须匹配。因此,如果小时为负数,则分钟和秒必须为负数或零。
- 参数:
-
hours
- 小时的时区偏移,从-18到+18 -
minutes
- 分钟的时区偏移,从0到±59,符号与小时匹配 -
seconds
- 秒的时区偏移,从0到±59,符号与小时和分钟匹配 - 返回:
- 时区偏移,不能为空
- 抛出:
-
DateTimeException
- 如果偏移不在所需范围内
-
from
从时间对象获取ZoneOffset
的实例。这基于指定的时间对象获取偏移。
TemporalAccessor
表示一组任意的日期和时间信息,此工厂将其转换为ZoneOffset
的实例。TemporalAccessor
表示某种形式的日期和时间信息。此工厂将任意时间对象转换为ZoneOffset
的实例。转换使用
TemporalQueries.offset()
查询,该查询依赖于提取OFFSET_SECONDS
字段。此方法与函数接口
TemporalQuery
的签名匹配,允许通过方法引用ZoneOffset::from
将其用作查询。- 参数:
-
temporal
- 要转换的时间对象,不能为空 - 返回:
- 时区偏移,不能为空
- 抛出:
-
DateTimeException
- 如果无法转换为ZoneOffset
-
ofTotalSeconds
指定以秒为单位的总偏移量获取ZoneOffset
的实例偏移必须在范围
-18:00
到+18:00
内,对应于-64800到+64800。- 参数:
-
totalSeconds
- 以秒为单位的总时区偏移,从-64800到+64800 - 返回:
- 时区偏移,不能为空
- 抛出:
-
DateTimeException
- 如果偏移不在所需范围内
-
getTotalSeconds
public int getTotalSeconds()获取以秒为单位的总时区偏移量。这是访问偏移量的主要方式。它将小时、分钟和秒字段的总和作为单个偏移返回,可以将其添加到时间中。
- 返回:
- 总时区偏移量的秒数
-
getId
获取标准化的时区偏移ID。ID是标准ISO-8601格式化字符串的轻微变体,有三种格式:
Z
- 用于UTC(ISO-8601)+hh:mm
或-hh:mm
- 如果秒为零(ISO-8601)+hh:mm:ss
或-hh:mm:ss
- 如果秒不为零(非ISO-8601)
-
getRules
获取关联的时区规则。当查询时,规则将始终返回此偏移。实现类是不可变的、线程安全的和可序列化的。
-
isSupported
检查是否支持指定的字段。这将检查是否可以查询指定字段的偏移量。如果为false,则调用
range
和get
方法将抛出异常。如果字段是一个
ChronoField
,则在此处实现查询。OFFSET_SECONDS
字段返回true。所有其他ChronoField
实例将返回false。如果字段不是
ChronoField
,则通过调用TemporalField.isSupportedBy(TemporalAccessor)
方法并将this
作为参数传递来获取此方法的结果。字段是否受支持由字段确定。- 指定者:
-
isSupported
在接口TemporalAccessor
中 - 参数:
-
field
- 要检查的字段,null返回false - 返回值:
- 如果此偏移量支持该字段,则为true,否则为false
-
range
获取指定字段的有效值范围。范围对象表示字段的最小和最大有效值。此偏移量用于增强返回范围的准确性。如果无法返回范围,因为不支持该字段或出于其他原因,将抛出异常。
如果字段是一个
ChronoField
,则在此处实现查询。支持的字段将返回适当的范围实例。所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果字段不是
ChronoField
,则通过调用TemporalField.rangeRefinedBy(TemporalAccessor)
方法并将this
作为参数传递来获取此方法的结果。是否可以获取范围由字段确定。- 指定者:
-
range
在接口TemporalAccessor
中 - 参数:
-
field
- 要查询范围的字段,不为null - 返回值:
- 字段的有效值范围,不为null
- 抛出:
-
DateTimeException
- 如果无法获取字段的范围 -
UnsupportedTemporalTypeException
- 如果不支持该字段
-
get
以int
形式获取此偏移量的指定字段的值。查询此偏移量以获取指定字段的值。返回的值始终在字段的有效值范围内。如果无法返回值,因为不支持该字段或出于其他原因,将抛出异常。
如果字段是一个
ChronoField
,则在此处实现查询。OFFSET_SECONDS
字段返回偏移量的值。所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果字段不是
ChronoField
,则通过调用TemporalField.getFrom(TemporalAccessor)
方法并将this
作为参数传递来获取此方法的结果。是否可以获取值以及值代表什么由字段确定。- 指定者:
-
get
在接口TemporalAccessor
中 - 参数:
-
field
- 要获取的字段,不为null - 返回值:
- 字段的值
- 抛出:
-
DateTimeException
- 如果无法获取字段的值或值超出字段的有效值范围 -
UnsupportedTemporalTypeException
- 如果不支持该字段或值的范围超过int
-
ArithmeticException
- 如果发生数值溢出
-
getLong
以long
形式获取此偏移量的指定字段的值。查询此偏移量以获取指定字段的值。如果无法返回值,因为不支持该字段或出于其他原因,将抛出异常。
如果字段是一个
ChronoField
,则在此处实现查询。OFFSET_SECONDS
字段返回偏移量的值。所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果字段不是
ChronoField
,则通过调用TemporalField.getFrom(TemporalAccessor)
方法并将this
作为参数传递来获取此方法的结果。是否可以获取值以及值代表什么由字段确定。- 指定者:
-
getLong
在接口TemporalAccessor
中 - 参数:
-
field
- 要获取的字段,不为null - 返回值:
- 字段的值
- 抛出:
-
DateTimeException
- 如果无法获取字段的值 -
UnsupportedTemporalTypeException
- 如果不支持该字段 -
ArithmeticException
- 如果发生数值溢出
-
query
使用指定的查询查询此偏移量。使用指定的查询策略对象查询此偏移量。
TemporalQuery
对象定义要用于获取结果的逻辑。阅读查询的文档以了解此方法的结果。通过调用指定查询的
TemporalQuery.queryFrom(TemporalAccessor)
方法并将this
作为参数传递来获取此方法的结果。- 指定者:
-
query
在接口TemporalAccessor
中 - 类型参数:
-
R
- 结果的类型 - 参数:
-
query
- 要调用的查询,不为null - 返回值:
- 查询结果,可能返回null(由查询定义)
- 抛出:
-
DateTimeException
- 如果无法查询(由查询定义) -
ArithmeticException
- 如果发生数值溢出(由查询定义)
-
adjustInto
调整指定的时间对象以具有与此对象相同的偏移量。返回一个与输入相同的可观察类型的时间对象,偏移量更改为与此相同。
调整等同于使用
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
将此偏移量与另一个偏移量按降序进行比较。按照全球同一时间发生的相同时间顺序比较偏移量。因此,偏移量
+10:00
在偏移量+09:00
之前,依此类推,直到-18:00
。比较是“与equals一致”的,如
Comparable
定义的。- 指定者:
-
compareTo
在接口Comparable<ZoneOffset>
- 参数:
-
other
- 要比较的另一个日期,不能为空 - 返回值:
-
比较器值,如果此totalSeconds小于
other
的totalSeconds,则为负值,如果相等则为零,如果此totalSeconds大于other
的totalSeconds则为正值 - 抛出:
-
NullPointerException
- 如果other
为null
-
equals
检查此偏移量是否等于另一个偏移量。比较基于偏移量的秒数。这相当于按ID进行比较。
-
hashCode
public int hashCode()此偏移量的哈希码。 -
toString
将此偏移量输出为一个String
,使用规范化的ID。
-