- 所有已实现的接口:
-
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
FieldsModifier and TypeFieldDescriptionstatic final ZoneOffset最大支持的偏移的常量。static final ZoneOffset最小支持的偏移的常量。static final ZoneOffsetUTC的时区偏移,ID为'Z'。 -
Method Summary
Modifier and TypeMethodDescriptionadjustInto(Temporal temporal) 调整指定的时间对象,使其具有与此对象相同的偏移量。intcompareTo(ZoneOffset other) 按降序比较此偏移与另一个偏移。boolean检查此偏移是否等于另一个偏移。static ZoneOffsetfrom(TemporalAccessor temporal) 从时间对象获取ZoneOffset的实例。intget(TemporalField field) 以int形式获取此偏移的指定字段的值。getId()获取标准化的时区偏移ID。longgetLong(TemporalField field) 以long形式获取此偏移的指定字段的值。getRules()获取关联的时区规则。int获取以秒为单位的总时区偏移量。inthashCode()此偏移的哈希码。booleanisSupported(TemporalField field) 检查是否支持指定的字段。static ZoneOffset使用ID获取ZoneOffset的实例。static ZoneOffsetofHours(int hours) 使用小时偏移获取ZoneOffset的实例。static ZoneOffsetofHoursMinutes(int hours, int minutes) 使用小时和分钟偏移获取ZoneOffset的实例。static ZoneOffsetofHoursMinutesSeconds(int hours, int minutes, int seconds) 使用小时、分钟和秒偏移获取ZoneOffset的实例。static ZoneOffsetofTotalSeconds(int totalSeconds) 指定以秒为单位的总偏移量获取ZoneOffset的实例。<R> Rquery(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。
-