- java.lang.Object
-
- java.time.ZonedDateTime
-
- 实现的所有接口
-
Serializable
,Comparable<ChronoZonedDateTime<?>>
,ChronoZonedDateTime<LocalDate>
,Temporal
,TemporalAccessor
public final class ZonedDateTimeextends Objectimplements Temporal, ChronoZonedDateTime<LocalDate>, Serializable
ISO-2007-12-03T10:15:30+01:00 Europe/Paris
,例如2007-12-03T10:15:30+01:00 Europe/Paris
。ZonedDateTime
是具有时区的日期时间的不可变表示。 此类存储所有日期和时间字段,精度为纳秒和时区,区域偏移用于处理模糊的本地日期时间。 例如,值“2007年10月2日13:45.30.123456789 + 02:00在欧洲/巴黎时区”可以存储在ZonedDateTime
。此类处理从本地时间线
LocalDateTime
到即时时间线Instant
。 两个时间线之间的差异是UTC /格林威治的偏移量,由ZoneOffset
表示。在两个时间线之间转换涉及使用从ZoneId访问的
ZoneId
计算偏移量。 瞬间获得偏移量很简单,因为每个瞬间只有一个有效偏移量。 相反,获得本地日期时间的偏移量并不简单。 有三种情况:- 正常,有一个有效的偏移量。 对于一年中的绝大多数情况,正常情况适用,其中本地日期时间有一个有效的偏移量。
- 差距,零有效偏移。 这是因为春天夏令时从“冬天”变为“夏天”,时钟向前跳跃。 在间隙中,存在没有有效偏移的本地日期时间值。
- 重叠,有两个有效的偏移量。 这是因为秋季夏令时从“夏季”变为“冬季”,因此时钟被缩回。 在重叠中,存在具有两个有效偏移的本地日期时间值。
通过获得偏移量直接或隐式地从本地日期时间转换为瞬间的任何方法都有可能变得复杂。
对于差距,一般策略是如果本地日期时间落在差距的中间,则结果的分区日期时间将具有向前移动的差距长度的本地日期时间,从而产生日期 - 时间在后期偏移,通常是“夏天”时间。
对于重叠,一般策略是如果本地日期时间落在重叠的中间,则将保留先前的偏移。 如果没有先前的偏移,或者先前的偏移无效,则使用较早的偏移,通常是“夏天”时间。另外两种方法,
withEarlierOffsetAtOverlap()
和withLaterOffsetAtOverlap()
,有助于管理重叠的情况。在设计方面,该类应主要视为
LocalDateTime
和ZoneId
的组合。ZoneOffset
是一个重要的,但次要的信息,用于确保班级代表瞬间,特别是在夏令时重叠。这是一个value-based班; 在
ZonedDateTime
实例上使用身份敏感操作(包括引用相等(==
),标识哈希码或同步)可能会产生不可预测的结果,应该避免使用。equals
方法应该用于比较。- 实现要求:
-
ZonedDateTime
保持相当于三个单独对象的LocalDateTime
,ZoneId
和已解决的ZoneOffset
。 偏移和本地日期时间用于在必要时定义瞬间。 区域ID用于获取偏移量变化的方式和时间的规则。 无法自由设置偏移,因为区域控制哪些偏移有效。这个类是不可变的和线程安全的。
- 从以下版本开始:
- 1.8
- 另请参见:
- Serialized Form
-
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 boolean
equals(Object obj)
检查此日期时间是否等于另一个日期时间。String
format(DateTimeFormatter formatter)
使用指定的格式化程序格式化此日期时间。static ZonedDateTime
from(TemporalAccessor temporal)
从时态对象获得ZonedDateTime
的实例。int
get(TemporalField field)
从此日期时间获取指定字段的值为int
。int
getDayOfMonth()
获取日期字段。DayOfWeek
getDayOfWeek()
获取星期几字段,即枚举DayOfWeek
。int
getDayOfYear()
获取日期字段。int
getHour()
获取当日时间字段。long
getLong(TemporalField field)
从此日期时间获取指定字段的值,作为long
。int
getMinute()
获取分钟字段。Month
getMonth()
使用Month
枚举获取年份字段。int
getMonthValue()
获取1到12之间的月份字段。int
getNano()
获取纳秒级字段。ZoneOffset
getOffset()
获取区域偏移量,例如“+01:00”。int
getSecond()
获取第二分钟字段。int
getYear()
获取年份字段。ZoneId
getZone()
获取时区,例如“Europe / Paris”。int
hashCode()
此日期时间的哈希码。boolean
isSupported(TemporalField field)
检查是否支持指定的字段。boolean
isSupported(TemporalUnit unit)
检查指定的单元是否受支持。ZonedDateTime
minus(long amountToSubtract, TemporalUnit unit)
返回此日期时间的副本,并减去指定的数量。ZonedDateTime
minus(TemporalAmount amountToSubtract)
返回此日期时间的副本,并减去指定的数量。ZonedDateTime
minusDays(long days)
返回此ZonedDateTime
的副本,并减去指定的天数。ZonedDateTime
minusHours(long hours)
返回此ZonedDateTime
的副本,并减去指定的小时数。ZonedDateTime
minusMinutes(long minutes)
返回此ZonedDateTime
的副本,并减去指定的分钟数。ZonedDateTime
minusMonths(long months)
返回此ZonedDateTime
的副本,并减去指定的月数。ZonedDateTime
minusNanos(long nanos)
返回此ZonedDateTime
的副本,减去指定的纳秒数。ZonedDateTime
minusSeconds(long seconds)
返回此ZonedDateTime
的副本,并减去指定的秒数。ZonedDateTime
minusWeeks(long weeks)
返回此ZonedDateTime
的副本,并减去指定的周数。ZonedDateTime
minusYears(long years)
返回此ZonedDateTime
的副本,并减去指定的年数。static ZonedDateTime
now()
从默认时区中的系统时钟获取当前日期时间。static ZonedDateTime
now(Clock clock)
从指定的时钟获得当前日期时间。static ZonedDateTime
now(ZoneId zone)
从指定时区的系统时钟获取当前日期时间。static ZonedDateTime
of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond, ZoneId zone)
从年,月,日,小时,分钟,秒,纳秒和时区获得ZonedDateTime
的实例。static ZonedDateTime
of(LocalDate date, LocalTime time, ZoneId zone)
从本地日期和时间获得ZonedDateTime
的实例。static ZonedDateTime
of(LocalDateTime localDateTime, ZoneId zone)
从本地日期时间获得ZonedDateTime
的实例。static ZonedDateTime
ofInstant(Instant instant, ZoneId zone)
从Instant
获得ZonedDateTime
的实例。static ZonedDateTime
ofInstant(LocalDateTime localDateTime, ZoneOffset offset, ZoneId zone)
从通过组合本地日期时间和偏移量形成的瞬间获得ZonedDateTime
的实例。static ZonedDateTime
ofLocal(LocalDateTime localDateTime, ZoneId zone, ZoneOffset preferredOffset)
如果可能,使用首选偏移量从本地日期时间获取ZonedDateTime
的实例。static ZonedDateTime
ofStrict(LocalDateTime localDateTime, ZoneOffset offset, ZoneId zone)
获得ZonedDateTime
的实例,严格验证本地日期时间,偏移量和区域ID的组合。static ZonedDateTime
parse(CharSequence text)
从文本字符串(如2007-12-03T10:15:30+01:00[Europe/Paris]
获取ZonedDateTime
的实例。static ZonedDateTime
parse(CharSequence text, DateTimeFormatter formatter)
使用特定格式化程序从文本字符串中获取ZonedDateTime
的实例。ZonedDateTime
plus(long amountToAdd, TemporalUnit unit)
返回此日期时间的副本,并添加指定的数量。ZonedDateTime
plus(TemporalAmount amountToAdd)
返回此日期时间的副本,并添加指定的数量。ZonedDateTime
plusDays(long days)
返回此ZonedDateTime
的副本,并添加指定的天数。ZonedDateTime
plusHours(long hours)
返回此ZonedDateTime
的副本,并添加指定的小时数。ZonedDateTime
plusMinutes(long minutes)
返回此ZonedDateTime
的副本,并添加指定的分钟数。ZonedDateTime
plusMonths(long months)
返回此ZonedDateTime
的副本,并添加指定的月数。ZonedDateTime
plusNanos(long nanos)
返回此ZonedDateTime
的副本,ZonedDateTime
添加了指定的纳秒数。ZonedDateTime
plusSeconds(long seconds)
返回此ZonedDateTime
的副本,并添加指定的秒数。ZonedDateTime
plusWeeks(long weeks)
返回此ZonedDateTime
的副本,并添加指定的周数。ZonedDateTime
plusYears(long years)
返回此ZonedDateTime
的副本,并添加指定的年数。<R> R
query(TemporalQuery<R> query)
使用指定的查询查询此日期时间。ValueRange
range(TemporalField field)
获取指定字段的有效值范围。LocalDate
toLocalDate()
获取此日期时间的LocalDate
部分。LocalDateTime
toLocalDateTime()
获取此日期时间的LocalDateTime
部分。LocalTime
toLocalTime()
获取此日期时间的LocalTime
部分。OffsetDateTime
toOffsetDateTime()
将此日期时间转换为OffsetDateTime
。String
toString()
将此日期时间输出为String
,例如2007-12-03T10:15:30+01:00[Europe/Paris]
。ZonedDateTime
truncatedTo(TemporalUnit unit)
返回此ZonedDateTime
的副本,并截断时间。long
until(Temporal endExclusive, TemporalUnit unit)
根据指定的单位计算到另一个日期时间的时间量。ZonedDateTime
with(TemporalAdjuster adjuster)
返回此日期时间的调整副本。ZonedDateTime
with(TemporalField field, long newValue)
返回此日期时间的副本,并将指定字段设置为新值。ZonedDateTime
withDayOfMonth(int dayOfMonth)
返回此ZonedDateTime
的副本,并更改日期。ZonedDateTime
withDayOfYear(int dayOfYear)
返回此ZonedDateTime
的副本,并更改日期。ZonedDateTime
withEarlierOffsetAtOverlap()
返回此日期时间的副本,将区域偏移更改为本地时间线重叠处的两个有效偏移中较早的一个。ZonedDateTime
withFixedOffsetZone()
返回此日期时间的副本,并将区域ID设置为偏移量。ZonedDateTime
withHour(int hour)
返回此ZonedDateTime
的副本,并更改日期。ZonedDateTime
withLaterOffsetAtOverlap()
返回此日期时间的副本,将区域偏移更改为本地时间线重叠处的两个有效偏移中的较晚者。ZonedDateTime
withMinute(int minute)
返回此ZonedDateTime
的副本,并更改了分钟。ZonedDateTime
withMonth(int month)
返回此ZonedDateTime
的副本,其中年份已更改。ZonedDateTime
withNano(int nanoOfSecond)
返回此ZonedDateTime
的副本,并更改了纳秒。ZonedDateTime
withSecond(int second)
返回此ZonedDateTime
的副本,并在第二分钟更改。ZonedDateTime
withYear(int year)
返回此ZonedDateTime
的副本,并更改年份。ZonedDateTime
withZoneSameInstant(ZoneId zone)
使用不同的时区返回此日期时间的副本,保留该瞬间。ZonedDateTime
withZoneSameLocal(ZoneId zone)
使用不同的时区返回此日期时间的副本,如果可能,保留本地日期时间。-
声明方法的接口 java.time.chrono.ChronoZonedDateTime
compareTo, getChronology, isAfter, isBefore, isEqual, toEpochSecond, toInstant
-
-
-
-
方法详细信息
-
now
public static ZonedDateTime now()
从默认时区中的系统时钟获取当前日期时间。这将在默认时区中查询
system clock
以获取当前日期时间。 区域和偏移量将根据时钟中的时区进行设置。使用此方法将无法使用备用时钟进行测试,因为时钟是硬编码的。
- 结果
- 使用系统时钟的当前日期时间,不为空
-
now
public static ZonedDateTime now(ZoneId zone)
从指定时区的系统时钟获取当前日期时间。这将查询
system clock
以获取当前日期时间。 指定时区可避免依赖于默认时区。 偏移量将从指定的时区计算。使用此方法将无法使用备用时钟进行测试,因为时钟是硬编码的。
- 参数
-
zone
- 要使用的区域ID,不为空 - 结果
- 使用系统时钟的当前日期时间,不为空
-
now
public static ZonedDateTime now(Clock clock)
从指定的时钟获得当前日期时间。这将查询指定的时钟以获取当前日期时间。 区域和偏移量将根据时钟中的时区进行设置。
使用此方法允许使用备用时钟进行测试。 可以使用
dependency injection
引入备用时钟。- 参数
-
clock
- 要使用的时钟,不为空 - 结果
- 当前日期时间,不为空
-
of
public static ZonedDateTime of(LocalDate date, LocalTime time, ZoneId zone)
从本地日期和时间获得ZonedDateTime
的实例。这将创建一个与输入本地日期和时间尽可能匹配的分区日期时间。 时区规则(例如夏令时)意味着并非每个本地日期时间对指定区域都有效,因此可以调整本地日期时间。
本地日期时间和第一个组合形成一个本地日期时间。 然后将本地日期时间解析为时间线上的单个瞬间。 这是通过从区域ID的
rules
定义的本地日期时间中找到UTC / Greenwich的有效偏移量来实现的。在大多数情况下,本地日期时间只有一个有效的偏移量。 在重叠的情况下,当设置回时钟时,存在两个有效的偏移。 该方法使用通常对应于“夏天”的较早偏移。
在间隙的情况下,当时钟向前跳跃时,没有有效的偏移。 相反,将本地日期时间调整为稍后的间隙长度。 对于典型的一小时夏令时变化,本地日期时间将在一小时后移动到通常对应于“夏天”的偏移量。
- 参数
-
date
- 本地日期,不为空 -
time
- 当地时间,非空 -
zone
- 时区,不是null - 结果
- 偏移日期时间,不为空
-
of
public static ZonedDateTime of(LocalDateTime localDateTime, ZoneId zone)
从本地日期时间获得ZonedDateTime
的实例。这将创建一个与输入本地日期时间尽可能匹配的分区日期时间。 时区规则(例如夏令时)意味着并非每个本地日期时间对指定区域都有效,因此可以调整本地日期时间。
本地日期时间在时间线上解析为单个瞬间。 这是通过从区域ID的
rules
定义的本地日期时间中找到UTC / Greenwich的有效偏移量来实现的。在大多数情况下,本地日期时间只有一个有效的偏移量。 在重叠的情况下,当设置回时钟时,存在两个有效的偏移。 该方法使用通常对应于“夏天”的较早偏移。
在间隙的情况下,当时钟向前跳跃时,没有有效的偏移。 相反,将本地日期时间调整为稍后的间隙长度。 对于典型的一小时夏令时变化,本地日期时间将在一小时后移动到通常对应于“夏天”的偏移量。
- 参数
-
localDateTime
- 本地日期时间,不为空 -
zone
- 时区,不是null - 结果
- 分区日期时间,不为空
-
of
public static ZonedDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond, ZoneId zone)
从年,月,日,小时,分钟,秒,纳秒和时区获得ZonedDateTime
的实例。这将创建一个分区日期时间,尽可能地匹配七个指定字段的本地日期时间。 时区规则(例如夏令时)意味着并非每个本地日期时间对指定区域都有效,因此可以调整本地日期时间。
本地日期时间在时间线上解析为单个瞬间。 这是通过从区域ID的
rules
定义的本地日期时间中找到UTC / Greenwich的有效偏移量来实现的。在大多数情况下,本地日期时间只有一个有效的偏移量。 在重叠的情况下,当设置回时钟时,存在两个有效的偏移。 该方法使用通常对应于“夏天”的较早偏移。
在间隙的情况下,当时钟向前跳跃时,没有有效的偏移。 相反,将本地日期时间调整为稍后的间隙长度。 对于典型的一小时夏令时变化,本地日期时间将在一小时后移动到通常对应于“夏天”的偏移量。
此方法主要用于编写测试用例。 非测试代码通常使用其他方法来创建偏移时间。
LocalDateTime
具有等效工厂方法的五个额外便利变体,其中参数较少。 这里没有提供它们来减少API的占用空间。- 参数
-
year
- 表示年份,从MIN_YEAR到MAX_YEAR -
month
- 表示的月份,从1(1月)到12(12月) -
dayOfMonth
- 表示的日期,范围是1到31 -
hour
- 表示从0到23的小时 -
minute
- 表示从0到59的小时 -
second
- 表示从0到59的second
-
nanoOfSecond
- 代表的纳秒数,从0到999,999,999 -
zone
- 时区,不是null - 结果
- 偏移日期时间,不为空
- 异常
-
DateTimeException
- 如果任何字段的值超出范围,或者月份的月份无效
-
ofLocal
public static ZonedDateTime ofLocal(LocalDateTime localDateTime, ZoneId zone, ZoneOffset preferredOffset)
如果可能,使用首选偏移量从本地日期时间获取ZonedDateTime
的实例。本地日期时间在时间线上解析为单个瞬间。 这是通过从区域ID的
rules
定义的本地日期时间中找到UTC / Greenwich的有效偏移量来实现的。在大多数情况下,本地日期时间只有一个有效的偏移量。 在重叠的情况下,时钟被设置回来,有两个有效的偏移。 如果首选偏移是有效偏移之一,则使用它。 否则使用较早的有效偏移,通常对应于“夏天”。
在间隙的情况下,时钟向前跳跃,没有有效的偏移。 相反,将本地日期时间调整为稍后的间隙长度。 对于典型的一小时夏令时变化,本地日期时间将在一小时后移动到通常对应于“夏天”的偏移量。
- 参数
-
localDateTime
- 本地日期时间,不为空 -
zone
- 时区,非空 -
preferredOffset
- 区域偏移量,如果没有首选项,则为null - 结果
- 分区日期时间,不为空
-
ofInstant
public static ZonedDateTime ofInstant(Instant instant, ZoneId zone)
从Instant
获得ZonedDateTime
的实例。这将创建一个与指定时间相同的分区日期时间。 调用
ChronoZonedDateTime.toInstant()
将返回等于此处使用的瞬间。将瞬间转换为分区日期时间很简单,因为每个瞬间只有一个有效偏移量。
- 参数
-
instant
- 创建日期时间的瞬间,而不是null -
zone
- 时区,非空 - 结果
- 分区日期时间,不为空
- 异常
-
DateTimeException
- 如果结果超出支持的范围
-
ofInstant
public static ZonedDateTime ofInstant(LocalDateTime localDateTime, ZoneOffset offset, ZoneId zone)
从通过组合本地日期时间和偏移量形成的瞬间获得ZonedDateTime
的实例。这将创建一个分区日期时间
combining
LocalDateTime
和ZoneOffset
。 该组合唯一地指定了没有歧义的瞬间。将瞬间转换为分区日期时间很简单,因为每个瞬间只有一个有效偏移量。 如果有效偏移量与指定的偏移量不同,则分区日期时间的日期时间和偏移量将与指定的不同。
如果
ZoneId
被使用是ZoneOffset
,该方法等效于of(LocalDateTime, ZoneId)
。- 参数
-
localDateTime
- 本地日期时间,不为空 -
offset
- 区域偏移量,不为空 -
zone
- 时区,非空 - 结果
- 分区日期时间,不为空
-
ofStrict
public static ZonedDateTime ofStrict(LocalDateTime localDateTime, ZoneOffset offset, ZoneId zone)
获得ZonedDateTime
的实例,严格验证本地日期时间,偏移量和区域ID的组合。这将创建一个分区日期时间,以确保偏移量根据指定区域的规则对本地日期时间有效。 如果偏移量无效,则抛出异常。
- 参数
-
localDateTime
- 本地日期时间,不为空 -
offset
- 区域偏移量,不为空 -
zone
- 时区,不是null - 结果
- 分区日期时间,不为空
- 异常
-
DateTimeException
- 如果参数组合无效
-
from
public static ZonedDateTime from(TemporalAccessor temporal)
从时态对象获得ZonedDateTime
的实例。这将根据指定的时间获得分区日期时间。
TemporalAccessor
表示一组任意日期和时间信息,该工厂将其转换为ZonedDateTime
的实例。转换将首先从时间对象获得
ZoneId
,如有必要,将返回到ZoneOffset
。 然后它会尝试获得Instant
,必要时可以回到LocalDateTime
。 结果将是ZoneId
或ZoneOffset
与Instant
或LocalDateTime
。 允许实现执行优化,例如访问与相关对象等效的那些字段。该方法匹配功能接口
TemporalQuery
的签名,允许其通过方法参考ZonedDateTime::from
用作查询。- 参数
-
temporal
- 要转换的临时对象,而不是null - 结果
- 分区日期时间,不为空
- 异常
-
DateTimeException
- 如果无法转换为ZonedDateTime
- 另请参见:
-
Chronology.zonedDateTime(TemporalAccessor)
-
parse
public static ZonedDateTime parse(CharSequence text)
从文本字符串(如2007-12-03T10:15:30+01:00[Europe/Paris]
获取ZonedDateTime
的实例。该字符串必须表示有效的日期时间,并使用
DateTimeFormatter.ISO_ZONED_DATE_TIME
进行解析。- 参数
-
text
- 要解析的文本,例如“2007-12-03T10:15:30 + 01:00 [欧洲/巴黎]”,不为空 - 结果
- 解析的分区日期时间,而不是null
- 异常
-
DateTimeParseException
- 如果无法解析文本
-
parse
public static ZonedDateTime parse(CharSequence text, DateTimeFormatter formatter)
使用特定格式化程序从文本字符串中获取ZonedDateTime
的实例。使用格式化程序解析文本,返回日期时间。
- 参数
-
text
- 要解析的文本,而不是null -
formatter
- 要使用的格式化程序,而不是null - 结果
- 解析的分区日期时间,而不是null
- 异常
-
DateTimeParseException
- 如果无法解析文本
-
isSupported
public boolean isSupported(TemporalField field)
检查是否支持指定的字段。这将检查是否可以查询指定字段的日期时间。 如果是假,然后调用
range
,get
和with(TemporalField, long)
方法会抛出异常。如果该字段是
ChronoField
,则在此处实现查询。 支持的字段是:-
NANO_OF_SECOND
-
NANO_OF_DAY
-
MICRO_OF_SECOND
-
MICRO_OF_DAY
-
MILLI_OF_SECOND
-
MILLI_OF_DAY
-
SECOND_OF_MINUTE
-
SECOND_OF_DAY
-
MINUTE_OF_HOUR
-
MINUTE_OF_DAY
-
HOUR_OF_AMPM
-
CLOCK_HOUR_OF_AMPM
-
HOUR_OF_DAY
-
CLOCK_HOUR_OF_DAY
-
AMPM_OF_DAY
-
DAY_OF_WEEK
-
ALIGNED_DAY_OF_WEEK_IN_MONTH
-
ALIGNED_DAY_OF_WEEK_IN_YEAR
-
DAY_OF_MONTH
-
DAY_OF_YEAR
-
EPOCH_DAY
-
ALIGNED_WEEK_OF_MONTH
-
ALIGNED_WEEK_OF_YEAR
-
MONTH_OF_YEAR
-
PROLEPTIC_MONTH
-
YEAR_OF_ERA
-
YEAR
-
ERA
-
INSTANT_SECONDS
-
OFFSET_SECONDS
ChronoField
实例将返回false。如果该字段不是
ChronoField
,则通过调用TemporalField.isSupportedBy(TemporalAccessor)
传递this
作为参数来获得此方法的结果。 字段是否受支持由字段确定。- Specified by:
-
isSupported
在界面ChronoZonedDateTime<LocalDate>
- Specified by:
-
isSupported
在界面TemporalAccessor
- 参数
-
字段
- 要检查的字段,null返回false - 结果
- 如果此日期时间支持该字段,则为true,否则为false
-
-
isSupported
public boolean isSupported(TemporalUnit unit)
检查指定的单元是否受支持。这将检查是否可以将指定的单位添加到此日期时间或从该日期时间中减去。 如果为false,则调用
plus(long, TemporalUnit)
和minus
方法将引发异常。如果单位是
ChronoUnit
,则在此处执行查询。 支持的单位是:-
NANOS
-
MICROS
-
MILLIS
-
SECONDS
-
MINUTES
-
HOURS
-
HALF_DAYS
-
DAYS
-
WEEKS
-
MONTHS
-
YEARS
-
DECADES
-
CENTURIES
-
MILLENNIA
-
ERAS
ChronoUnit
实例将返回false。如果该单元不是
ChronoUnit
,则此方法的结果是通过调用获得TemporalUnit.isSupportedBy(Temporal)
传递this
作为参数。 设备是否受支持由设备决定。- Specified by:
-
isSupported
在界面ChronoZonedDateTime<LocalDate>
- Specified by:
-
isSupported
在界面Temporal
- 参数
-
unit
- 要检查的单位,null返回false - 结果
- 如果可以添加/减去单位,则为true,否则为false
-
-
range
public ValueRange range(TemporalField field)
获取指定字段的有效值范围。范围对象表示字段的最小和最大有效值。 此日期时间用于提高返回范围的准确性。 如果无法返回范围,因为不支持该字段或由于某些其他原因,将引发异常。
如果该字段是
ChronoField
,则在此处执行查询。supported fields
将返回适当的范围实例。 所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果该字段是不是一个
ChronoField
,则此方法的结果是通过调用获得TemporalField.rangeRefinedBy(TemporalAccessor)
传递this
作为参数。 是否可以获得范围由该字段确定。- Specified by:
-
range
在界面TemporalAccessor
- 参数
-
字段
- 要查询范围的字段,而不是null - 结果
- 字段的有效值范围,不为null
- 异常
-
DateTimeException
- 如果无法获得该字段的范围 -
UnsupportedTemporalTypeException
- 如果不支持该字段
-
get
public int get(TemporalField field)
从此日期时间获取指定字段的值为int
。这将查询此日期时间以获取指定字段的值。 返回的值将始终在该字段的有效值范围内。 如果无法返回该值,因为不支持该字段或由于某些其他原因,将引发异常。
如果该字段是
ChronoField
,则在此处执行查询。 该supported fields
将返回基于此日期时间有效值,除了NANO_OF_DAY
,MICRO_OF_DAY
,EPOCH_DAY
,PROLEPTIC_MONTH
和INSTANT_SECONDS
这是太大,无法在int
并抛出UnsupportedTemporalTypeException
。 所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果该字段不是
ChronoField
,则通过调用this
作为参数调用TemporalField.getFrom(TemporalAccessor)
获得此方法的结果。 是否可以获得该值以及该值表示的值由该字段确定。- Specified by:
-
get
在界面TemporalAccessor
- 参数
-
字段
- 要获取的字段,而不是null - 结果
- 该字段的值
- 异常
-
DateTimeException
- 如果无法获取该字段的值或该值超出该字段的有效值范围 -
UnsupportedTemporalTypeException
- 如果不支持该字段或值的范围超过int
-
ArithmeticException
- 如果发生数字溢出
-
getLong
public long getLong(TemporalField field)
从此日期时间获取指定字段的值为long
。这将查询此日期时间以获取指定字段的值。 如果无法返回该值,因为不支持该字段或由于某些其他原因,将引发异常。
如果该字段是
ChronoField
,则在此处执行查询。supported fields
将根据此日期时间返回有效值。 所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果该字段是不是一个
ChronoField
,则此方法的结果是通过调用获得TemporalField.getFrom(TemporalAccessor)
传递this
作为参数。 是否可以获得该值以及该值表示的值由该字段确定。- Specified by:
-
getLong
在界面TemporalAccessor
- 参数
-
字段
- 要获取的字段,而不是null - 结果
- 该字段的值
- 异常
-
DateTimeException
- 如果无法获得该字段的值 -
UnsupportedTemporalTypeException
- 如果不支持该字段 -
ArithmeticException
- 如果发生数字溢出
-
getOffset
public ZoneOffset getOffset()
获取区域偏移量,例如“+01:00”。这是本地日期时间与UTC /格林威治的偏移量。
- Specified by:
-
getOffset
在界面ChronoZonedDateTime<LocalDate>
- 结果
- 区域偏移,不为空
-
withEarlierOffsetAtOverlap
public ZonedDateTime withEarlierOffsetAtOverlap()
返回此日期时间的副本,将区域偏移更改为本地时间线重叠处的两个有效偏移中较早的一个。当本地时间线重叠时,例如在秋季夏令时切换时,此方法仅具有任何效果。 在这种情况下,本地日期时间有两个有效的偏移量。 调用此方法将返回一个分区日期时间,其中包含所选的两个中的较早者。
如果在不重叠时调用此方法,则返回
this
。此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
withEarlierOffsetAtOverlap
在界面ChronoZonedDateTime<LocalDate>
- 结果
- 基于此日期时间的
ZonedDateTime
,具有较早的偏移量,而不是null
-
withLaterOffsetAtOverlap
public ZonedDateTime withLaterOffsetAtOverlap()
返回此日期时间的副本,将区域偏移更改为本地时间线重叠处的两个有效偏移中的较晚者。当本地时间线重叠时,例如在秋季夏令时切换时,此方法仅具有任何效果。 在这种情况下,本地日期时间有两个有效的偏移量。 调用此方法将返回一个分区日期时间,其中包含所选择的两个日期时间。
如果在不重叠时调用此方法,则返回
this
。此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
withLaterOffsetAtOverlap
在界面ChronoZonedDateTime<LocalDate>
- 结果
- 基于此日期时间的
ZonedDateTime
,后面的偏移量,不为空
-
getZone
public ZoneId getZone()
获取时区,例如“Europe / Paris”。这将返回区域ID。 这标识了时区
rules
,用于确定UTC / Greenwich的偏移何时以及如何更改。区域ID可以与offset相同。 如果这是真的,那么由于时区规则,任何未来的计算(例如加法或减法)都没有复杂的边缘情况。 另见
withFixedOffsetZone()
。- Specified by:
-
getZone
在界面ChronoZonedDateTime<LocalDate>
- 结果
- 时区,不是空的
-
withZoneSameLocal
public ZonedDateTime withZoneSameLocal(ZoneId zone)
使用不同的时区返回此日期时间的副本,如果可能,保留本地日期时间。此方法更改时区并保留本地日期时间。 仅当本地日期时间对新区域无效时才会更改,使用与
ofLocal(LocalDateTime, ZoneId, ZoneOffset)
相同的方法确定。要更改区域并调整本地日期时间,请使用
withZoneSameInstant(ZoneId)
。此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
withZoneSameLocal
在界面ChronoZonedDateTime<LocalDate>
- 参数
-
zone
- 要更改为的时区,而不是null - 结果
- a
ZonedDateTime
基于此日期时间与请求的区域,不为空
-
withZoneSameInstant
public ZonedDateTime withZoneSameInstant(ZoneId zone)
使用不同的时区返回此日期时间的副本,保留该瞬间。此方法更改时区并保留瞬间。 这通常会导致本地日期时间发生变化。
该方法基于保留相同的瞬间,因此本地时间线中的间隙和重叠对结果没有影响。
要在保持当地时间的同时更改偏移量,请使用
withZoneSameLocal(ZoneId)
。- Specified by:
-
withZoneSameInstant
在界面ChronoZonedDateTime<LocalDate>
- 参数
-
zone
- 要更改为的时区,而不是null - 结果
- a
ZonedDateTime
基于此日期时间与请求的区域,不为空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
withFixedOffsetZone
public ZonedDateTime withFixedOffsetZone()
返回此日期时间的副本,并将区域ID设置为偏移量。这将返回一个分区日期时间,其中区域ID与
getOffset()
相同。 结果的本地日期时间,偏移量和时刻将与此日期时间相同。将日期时间设置为固定的单个偏移量意味着由于时区规则,任何未来的计算(例如加法或减法)都不会出现复杂的边缘情况。 这在通过网络发送分区日期时间时也很有用,因为大多数协议(例如ISO-8601)仅处理偏移,而不处理基于区域的区域ID。
这相当于
ZonedDateTime.of(zdt.toLocalDateTime(), zdt.getOffset())
。- 结果
-
ZonedDateTime
,区域ID设置为偏移量,不为空
-
toLocalDateTime
public LocalDateTime toLocalDateTime()
获取此日期时间的LocalDateTime
部分。这将返回
LocalDateTime
,其年,月,日和时间与此日期时间相同。- Specified by:
-
toLocalDateTime
在界面ChronoZonedDateTime<LocalDate>
- 结果
- 此日期时间的本地日期时间部分,不为空
-
toLocalDate
public LocalDate toLocalDate()
获取此日期时间的LocalDate
部分。这将返回
LocalDate
,其年,月,日为该日期时间。- Specified by:
-
toLocalDate
在界面ChronoZonedDateTime<LocalDate>
- 结果
- 此日期时间的日期部分,不为空
-
getYear
public int getYear()
获取年份字段。此方法返回年份的原始值
int
。根据
get(YEAR)
,此方法返回的年份是get(YEAR)
。 要获得年代,请使用get(YEAR_OF_ERA)
。- 结果
- 年份,从MIN_YEAR到MAX_YEAR
-
getMonthValue
public int getMonthValue()
获取1到12之间的月份字段。此方法将月份作为
int
从1返回到12.如果通过调用getMonth()
使用枚举Month
,则应用程序代码通常更清晰。- 结果
- 月份,从1到12
- 另请参见:
-
getMonth()
-
getMonth
public Month getMonth()
- 结果
- 一年中的月份,不是空的
- 另请参见:
-
getMonthValue()
-
getDayOfMonth
public int getDayOfMonth()
获取日期字段。此方法返回日期的原始值
int
。- 结果
- 每月,从1到31
-
getDayOfYear
public int getDayOfYear()
获取日期字段。此方法返回日期的原始值
int
。- 结果
- 一年中,从1到365,或闰年366
-
getDayOfWeek
public DayOfWeek getDayOfWeek()
获取星期几字段,这是一个枚举DayOfWeek
。此方法返回星期几的枚举
DayOfWeek
。 这避免了int
值的含义混淆。 如果需要访问原始值int
则枚举提供int value
。其他信息可以从
DayOfWeek
获得。 这包括值的文本名称。- 结果
- 星期几,不是空的
-
toLocalTime
public LocalTime toLocalTime()
获取此日期时间的LocalTime
部分。这将返回
LocalTime
,其时间,分钟,秒和纳秒与此日期时间相同。- Specified by:
-
toLocalTime
in interfaceChronoZonedDateTime<LocalDate>
- 结果
- 此日期时间的时间部分,不为空
-
getHour
public int getHour()
获取当日时间字段。- 结果
- 小时,从0到23
-
getMinute
public int getMinute()
获取分钟字段。- 结果
- 分钟,从0到59
-
getSecond
public int getSecond()
获取第二分钟字段。- 结果
- 第二分钟,从0到59
-
getNano
public int getNano()
获取纳秒级字段。- 结果
- 纳秒,从0到999,999,999
-
with
public ZonedDateTime with(TemporalAdjuster adjuster)
返回此日期时间的调整副本。这将返回一个
ZonedDateTime
,基于此,调整日期时间。 使用指定的调整器策略对象进行调整。 阅读调整器的文档,了解将进行哪些调整。简单的调整器可能只是设置其中一个字段,例如年份字段。 更复杂的调整器可能会将日期设置为该月的最后一天。
TemporalAdjusters
提供了一系列常见调整。 这些包括找到“月的最后一天”和“下周三”。 关键日期时间类还实现了TemporalAdjuster
接口,例如Month
和MonthDay
。 理算员负责处理特殊情况,例如不同长度的月份和闰年。例如,此代码返回7月最后一天的日期:
import static java.time.Month.*; import static java.time.temporal.TemporalAdjusters.*; result = zonedDateTime.with(JULY).with(lastDayOfMonth());
类
LocalDate
和LocalTime
实现TemporalAdjuster
,因此此方法可用于更改日期,时间或偏移量:result = zonedDateTime.with(date); result = zonedDateTime.with(time);
ZoneOffset
也实现了TemporalAdjuster
但是使用它作为参数通常没有任何效果。ZonedDateTime
的偏移量主要由时区控制。 因此,更改偏移量通常没有意义,因为本地日期时间和区域只有一个有效偏移量。 如果分区日期时间处于夏令时重叠,则偏移量用于在两个有效偏移之间切换。 在所有其他情况下,忽略偏移量。通过在指定的调整器上调用
TemporalAdjuster.adjustInto(Temporal)
方法(通过this
作为参数)来获得此方法的结果。此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
with
在界面ChronoZonedDateTime<LocalDate>
- Specified by:
-
with
in界面Temporal
- 参数
-
adjuster
- 要使用的调整器,不为null - 结果
- a
ZonedDateTime
基于this
进行了调整,而不是null - 异常
-
DateTimeException
- 如果无法进行调整 -
ArithmeticException
- 如果发生数字溢出
-
with
public ZonedDateTime with(TemporalField field, long newValue)
返回此日期时间的副本,并将指定字段设置为新值。这将返回一个
ZonedDateTime
,基于此值,更改指定字段的值。 这可用于更改任何支持的字段,例如年,月或日。 如果无法设置该值,因为不支持该字段或由于某些其他原因,将引发异常。在某些情况下,更改指定字段可能导致生成的日期时间变为无效,例如将月份从1月31日更改为2月将使日期无效。 在这种情况下,该字段负责解决日期。 通常,它会选择上一个有效日期,这个日期是本例中2月的最后一个有效日期。
如果该字段是
ChronoField
,则在此处执行调整。INSTANT_SECONDS
字段将返回指定时刻的日期时间。 该区域和纳秒级不变。 结果将具有从新的即时和原始区域派生的偏移量。 如果新的瞬时值超出有效范围,则将抛出DateTimeException
。通常会忽略
OFFSET_SECONDS
字段。ZonedDateTime
的偏移量主要由时区控制。 因此,更改偏移量通常没有意义,因为本地日期时间和区域只有一个有效偏移量。 如果分区日期时间处于夏令时重叠,则偏移量用于在两个有效偏移之间切换。 在所有其他情况下,忽略偏移量。 如果新的偏移值超出有效范围,则抛出DateTimeException
。其他
supported fields
将按照LocalDateTime
上的匹配方法运行 。 该区域不是计算的一部分,将保持不变。 当转换回ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。所有其他
ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果该字段是不是一个
ChronoField
,则此方法的结果是通过调用获得TemporalField.adjustInto(Temporal, long)
传递this
作为参数。 在这种情况下,该字段确定是否以及如何调整瞬间。此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
with
在界面ChronoZonedDateTime<LocalDate>
- Specified by:
-
with
在界面Temporal
- 参数
-
字段
- 要在结果中设置的字段,不为null -
newValue
- 结果中字段的新值 - 结果
- a
ZonedDateTime
基于this
,指定字段集,不为null - 异常
-
DateTimeException
- 如果无法设置该字段 -
UnsupportedTemporalTypeException
- 如果不支持该字段 -
ArithmeticException
- 如果发生数字溢出
-
withYear
public ZonedDateTime withYear(int year)
返回此ZonedDateTime
的副本,并更改年份。这适用于当地时间线
changing the year
当地日期时间。 然后使用区域ID将其转换回ZonedDateTime
以获取偏移量。转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
year
- 结果中设置的年份,从MIN_YEAR到MAX_YEAR - 结果
- a
ZonedDateTime
基于此请求年份的日期时间,不为空 - 异常
-
DateTimeException
- 如果年份值无效
-
withMonth
public ZonedDateTime withMonth(int month)
返回此ZonedDateTime
的副本,其中年份已更改。这是在当地时间线
changing the month
的当地日期时间运行。 然后使用区域ID将其转换回ZonedDateTime
以获取偏移量。转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
month
- 结果中设置的月份,从1(1月)到12(12月) - 结果
- a
ZonedDateTime
基于此日期时间与请求的月份,不为空 - 异常
-
DateTimeException
- 如果月份值无效
-
withDayOfMonth
public ZonedDateTime withDayOfMonth(int dayOfMonth)
返回此ZonedDateTime
的副本,并更改日期。这是在当地时间线
changing the day-of-month
的当地日期时间运行。 然后使用区域ID将其转换回ZonedDateTime
以获取偏移量。转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
dayOfMonth
- 结果中设置的日期,从1到28-31 - 结果
- a
ZonedDateTime
基于此日期时间与请求的日期,不为空 - 异常
-
DateTimeException
- 如果日期值无效,或者月份的月份无效
-
withDayOfYear
public ZonedDateTime withDayOfYear(int dayOfYear)
返回此ZonedDateTime
的副本,并更改日期。这是在当地时间线
changing the day-of-year
的当地日期时间运行。 然后使用区域ID将其转换回ZonedDateTime
以获取偏移量。当转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
dayOfYear
- 结果中设置的日期,从1到365-366 - 结果
- 基于此日期的
ZonedDateTime
与请求的日期,不为空 - 异常
-
DateTimeException
- 如果日期值无效,或者年度日期无效
-
withHour
public ZonedDateTime withHour(int hour)
返回此ZonedDateTime
的副本,并更改日期。这适用于当地时间线changing the time的当地日期时间。 然后使用区域ID将其转换回
ZonedDateTime
以获取偏移量。转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
hour
- 在结果中设置的小时,从0到23 - 结果
- a
ZonedDateTime
基于此日期时间和请求的小时,不为空 - 异常
-
DateTimeException
- 如果小时值无效
-
withMinute
public ZonedDateTime withMinute(int minute)
返回此ZonedDateTime
的副本,并更改了分钟。这在本地日期时间的当地时间线changing the time上运行。 然后使用区域ID将其转换回
ZonedDateTime
以获取偏移量。转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
minute
- 结果中设置的分钟数,从0到59 - 结果
- a
ZonedDateTime
基于此日期时间和请求的分钟,不为空 - 异常
-
DateTimeException
- 如果分钟值无效
-
withSecond
public ZonedDateTime withSecond(int second)
返回此ZonedDateTime
的副本,并在第二分钟更改。这在本地日期时间的当地时间线changing the time上运行。 然后使用区域ID将其转换回
ZonedDateTime
以获取偏移量。当转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
second
- 在结果中设置的second
,从0到59 - 结果
- 基于此日期时间的
ZonedDateTime
,请求秒,不为空 - 异常
-
DateTimeException
- 如果第二个值无效
-
withNano
public ZonedDateTime withNano(int nanoOfSecond)
返回此ZonedDateTime
的副本,其中纳秒级已更改。它在当地时间线changing the time的当地日期时间运行。 然后使用区域ID将其转换回
ZonedDateTime
以获取偏移量。当转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
nanoOfSecond
- 在结果中设置的纳秒数,从0到999,999,999 - 结果
- 基于此日期时间的
ZonedDateTime
,请求纳秒,不为空 - 异常
-
DateTimeException
- 如果纳米值无效
-
truncatedTo
public ZonedDateTime truncatedTo(TemporalUnit unit)
返回此ZonedDateTime
的副本,并截断时间。截断返回原始日期时间的副本,其中小于指定单位的字段设置为零。 例如,使用
minutes
单位截断将第二分钟和纳秒级字段设置为零。该单位必须有一个duration ,分为标准日的长度,没有余数。 这包括
ChronoUnit
和DAYS
上提供的所有时间单位。 其他单位抛出异常。这在当地时间线
truncating
运行 ,基础本地日期时间。 然后使用区域ID将其转换回ZonedDateTime
以获取偏移量。当转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
unit
- 要截断的单位,而不是null - 结果
- 基于此日期时间的
ZonedDateTime
,截断时间,不为空 - 异常
-
DateTimeException
- 如果无法截断 -
UnsupportedTemporalTypeException
- 如果不支持该装置
-
plus
public ZonedDateTime plus(TemporalAmount amountToAdd)
返回此日期时间的副本,并添加指定的数量。这将返回一个基于此的
ZonedDateTime
,并添加指定的数量。 金额通常为Period
或Duration
,但可能是实现TemporalAmount
界面的任何其他类型。通过调用
TemporalAmount.addTo(Temporal)
将计算委托给amount对象。 实施金额可以任意方式自由实施,但通常会回拨plus(long, TemporalUnit)
。 请参阅金额实施的文档,以确定是否可以成功添加。此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
plus
在界面ChronoZonedDateTime<LocalDate>
- Specified by:
-
plus
在界面Temporal
- 参数
-
amountToAdd
- 要添加的金额,不为空 - 结果
- a
ZonedDateTime
基于此日期时间而添加,不为空 - 异常
-
DateTimeException
- 如果无法添加 -
ArithmeticException
- 如果发生数字溢出
-
plus
public ZonedDateTime plus(long amountToAdd, TemporalUnit unit)
返回此日期时间的副本,并添加指定的数量。这将返回一个基于此的
ZonedDateTime
,其中包含已添加单位的金额。 如果无法添加金额,因为不支持该单位或由于某些其他原因,则会引发异常。如果该字段是
ChronoUnit
,则在此处实施添加。 该区域不是计算的一部分,结果将保持不变。 日期和时间单位的计算不同。日期单位在当地时间线上运行。 该期间首先添加到本地日期时间,然后使用区域ID转换回分区日期时间。 转换使用
ofLocal(LocalDateTime, ZoneId, ZoneOffset)
和添加前的偏移量。时间单位在即时时间线上运行。 该期间首先添加到本地日期时间,然后使用区域ID转换回分区日期时间。 转换使用
ofInstant(LocalDateTime, ZoneOffset, ZoneId)
和添加前的偏移量。如果该字段不是
ChronoUnit
,则通过调用TemporalUnit.addTo(Temporal, long)
传递this
作为参数来获得此方法的结果。 在这种情况下,该单元确定是否以及如何执行添加。此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
plus
在界面ChronoZonedDateTime<LocalDate>
- Specified by:
-
plus
在界面Temporal
- 参数
-
amountToAdd
- 要添加到结果中的单位数量可能为负数 -
unit
- 要添加的金额的单位,而不是空 - 结果
- a
ZonedDateTime
基于此日期时间,添加了指定的金额,而不是null - 异常
-
DateTimeException
- 如果无法添加 -
UnsupportedTemporalTypeException
- 如果不支持该装置 -
ArithmeticException
- 如果发生数字溢出
-
plusYears
public ZonedDateTime plusYears(long years)
返回此ZonedDateTime
的副本,并添加指定的年数。这在本地时间线
adding years
上运行到当地日期时间。 然后使用区域ID将其转换回ZonedDateTime
以获取偏移量。当转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
years
- 添加的年份,可能是负面的 - 结果
- 基于此日期时间的
ZonedDateTime
,添加年份,不为空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
plusMonths
public ZonedDateTime plusMonths(long months)
返回此ZonedDateTime
的副本,并添加指定的月份数。这在本地时间线
adding months
上运行到当地日期时间。 然后使用区域ID将其转换回ZonedDateTime
以获取偏移量。转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
months
- 要添加的月份可能是负数 - 结果
- 基于此日期时间的
ZonedDateTime
,添加月份,不为空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
plusWeeks
public ZonedDateTime plusWeeks(long weeks)
返回此ZonedDateTime
的副本,并添加指定的周数。这在本地时间线
adding weeks
运行到当地日期时间。 然后使用区域ID将其转换回ZonedDateTime
以获取偏移量。转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
weeks
- 要添加的周数,可能是负数 - 结果
- 基于此日期时间的
ZonedDateTime
,添加周数,不为空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
plusDays
public ZonedDateTime plusDays(long days)
返回此ZonedDateTime
的副本,并添加指定的天数。此操作在当地时间线
adding days
到当地日期时间。 然后使用区域ID将其转换回ZonedDateTime
以获取偏移量。转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
days
- 添加的日期,可能是负面的 - 结果
- 基于此日期时间的
ZonedDateTime
,添加日期,不为空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
plusHours
public ZonedDateTime plusHours(long hours)
返回此ZonedDateTime
的副本,并添加指定的小时数。这在即时时间线上运行,因此增加一小时将始终是一小时后的持续时间。 这可能导致本地日期时间改变一小时以外的数量。 请注意,这与天,月和年使用的方法不同,因此添加一天与添加24小时不同。
例如,考虑一个时区,例如'Europe / Paris',其中Autumn DST切换意味着当地时间02:00到02:59发生两次从夏天的偏移+02:00变为+01:00在冬季。
- 在01:30 + 02:00加1小时将导致02:30 + 02:00(均为夏季时间)
- 在02:30 + 02:00添加一小时将导致02:30 + 01:00(从夏季到冬季时间)
- 在02:30 + 01:00加1小时将导致03:30 + 01:00(两者都在冬季)
- 在01:30 + 02:00增加3小时将导致03:30 + 01:00(从夏季到冬季)
此实例是不可变的,不受此方法调用的影响。
- 参数
-
hours
- 要添加的小时数,可能是负数 - 结果
- 基于此日期时间的
ZonedDateTime
,添加小时数,不为空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
plusMinutes
public ZonedDateTime plusMinutes(long minutes)
返回此ZonedDateTime
的副本,并添加指定的分钟数。这在即时时间线上操作,使得添加一分钟将始终是一分钟之后的持续时间。 这可能导致本地日期时间改变一分钟以外的数量。 请注意,这与日,月和年使用的方法不同。
此实例是不可变的,不受此方法调用的影响。
- 参数
-
minutes
- 要添加的分钟数,可能是负数 - 结果
- 基于此日期时间的
ZonedDateTime
,添加分钟,不为空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
plusSeconds
public ZonedDateTime plusSeconds(long seconds)
返回此ZonedDateTime
的副本,并添加指定的秒数。这在即时时间线上操作,使得增加一秒将始终是一秒之后的持续时间。 这可能导致本地日期时间改变一秒以外的数量。 请注意,这与日,月和年使用的方法不同。
此实例是不可变的,不受此方法调用的影响。
- 参数
-
seconds
- 要添加的秒数,可能是负数 - 结果
- 基于此日期时间的
ZonedDateTime
,添加秒数,不为空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
plusNanos
public ZonedDateTime plusNanos(long nanos)
返回此ZonedDateTime
的副本,ZonedDateTime
添加了指定的纳秒数。这在即时时间线上操作,使得添加一个纳米将始终是一纳米的持续时间。 这可能导致本地日期时间改变一纳米以外的量。 请注意,这与日,月和年使用的方法不同。
此实例是不可变的,不受此方法调用的影响。
- 参数
-
nanos
- 要添加的nanos
,可能是负面的 - 结果
- 基于此日期时间的
ZonedDateTime
,加上纳秒,不为空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
minus
public ZonedDateTime minus(TemporalAmount amountToSubtract)
返回此日期时间的副本,并减去指定的数量。这将返回一个
ZonedDateTime
,基于此值,减去指定的数量。 金额通常为Period
或Duration
,但可以是实现TemporalAmount
界面的任何其他类型。通过调用
TemporalAmount.subtractFrom(Temporal)
将计算委托给amount对象。 实现量可以任意方式自由实现减法,但通常会回调到minus(long, TemporalUnit)
。 请参阅金额实施的文档,以确定是否可以成功减去它。此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
minus
在界面ChronoZonedDateTime<LocalDate>
- Specified by:
-
minus
在界面Temporal
- 参数
-
amountToSubtract
- 要减去的金额,而不是空 - 结果
- a
ZonedDateTime
基于此日期时间进行减法,而不是null - 异常
-
DateTimeException
- 如果无法进行减法 -
ArithmeticException
- 如果发生数字溢出
-
minus
public ZonedDateTime minus(long amountToSubtract, TemporalUnit unit)
返回此日期时间的副本,并减去指定的数量。这将返回一个
ZonedDateTime
,基于此值,减去单位的数量。 如果无法减去金额,因为不支持该单位或由于某些其他原因,则抛出异常。日期和时间单位的计算不同。
日期单位在当地时间线上运行。 首先从本地日期时间减去该时间段,然后使用区域ID将其转换回分区日期时间。 转换使用
ofLocal(LocalDateTime, ZoneId, ZoneOffset)
和减法前的偏移量。时间单位在即时时间线上运行。 首先从本地日期时间减去该时间段,然后使用区域ID将其转换回分区日期时间。 转换使用
ofInstant(LocalDateTime, ZoneOffset, ZoneId)
和减法前的偏移量。该方法相当于
plus(long, TemporalUnit)
,其数量为负数 。 有关添加和减法如何工作的完整描述,请参阅该方法。此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
minus
在界面ChronoZonedDateTime<LocalDate>
- Specified by:
-
minus
在界面Temporal
- 参数
-
amountToSubtract
- 从结果中减去的单位数量可能为负数 -
unit
- 要减去的金额的单位,而不是空 - 结果
- a
ZonedDateTime
基于此日期时间减去指定的金额,而不是空 - 异常
-
DateTimeException
- 如果无法进行减法 -
UnsupportedTemporalTypeException
- 如果不支持该装置 -
ArithmeticException
- 如果发生数字溢出
-
minusYears
public ZonedDateTime minusYears(long years)
返回此ZonedDateTime
的副本,减去指定的年数。此操作在当地时间线
subtracting years
到当地日期时间。 然后使用区域ID将其转换回ZonedDateTime
以获取偏移量。当转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
years
- 减去的年份,可能是负数 - 结果
- a
ZonedDateTime
基于此日期时间减去年份,不为空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
minusMonths
public ZonedDateTime minusMonths(long months)
返回此ZonedDateTime
的副本,并减去指定的月数。这在当地时间线
subtracting months
运行到当地日期时间。 然后使用区域ID将其转换回ZonedDateTime
以获取偏移量。当转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
months
- 要减去的月份,可能是负数 - 结果
- a
ZonedDateTime
基于此日期时间减去月份,而不是空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
minusWeeks
public ZonedDateTime minusWeeks(long weeks)
返回此ZonedDateTime
的副本,并减去指定的周数。这在本地时间线
subtracting weeks
上运行到当地日期时间。 然后使用区域ID将其转换回ZonedDateTime
以获取偏移量。转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
weeks
- 减去的周数,可能是负数 - 结果
- 基于此日期时间的
ZonedDateTime
减去周数,而不是空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
minusDays
public ZonedDateTime minusDays(long days)
返回此ZonedDateTime
的副本,并减去指定的天数。这在本地时间线
subtracting days
上运行到当地日期时间。 然后使用区域ID将其转换回ZonedDateTime
以获取偏移量。当转换回
ZonedDateTime
,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量。 如果在间隙中,则将通过间隙的长度向前调整本地日期时间。此实例是不可变的,不受此方法调用的影响。
- 参数
-
days
- 减去的日子,可能是负数 - 结果
- 基于此日期时间的
ZonedDateTime
,减去天数,而不是空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
minusHours
public ZonedDateTime minusHours(long hours)
返回此ZonedDateTime
的副本,并减去指定的小时数。这在即时时间线上运行,使得减去一小时将始终是一小时之前的持续时间。 这可能导致本地日期时间改变一小时以外的数量。 请注意,这与天,月和年使用的方法不同,因此减去一天与添加24小时不同。
例如,考虑一个时区,例如'Europe / Paris',其中Autumn DST切换意味着当地时间02:00到02:59发生两次从夏天的偏移+02:00变为+01:00在冬季。
- 从03:30 + 01:00减去一小时将导致02:30 + 01:00(两者都在冬季)
- 从02:30 + 01:00减去一小时将导致02:30 + 02:00(从冬季到夏季)
- 从02:30 + 02:00减去一小时将导致01:30 + 02:00(均为夏季时间)
- 从03:30 + 01:00减去3小时将导致01:30 + 02:00(从冬季到夏季)
此实例是不可变的,不受此方法调用的影响。
- 参数
-
hours
- 减去的小时数,可能是负数 - 结果
- 基于此日期时间的
ZonedDateTime
,减去小时数,不为空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
minusMinutes
public ZonedDateTime minusMinutes(long minutes)
返回此ZonedDateTime
的副本,并减去指定的分钟数。这在即时时间线上操作,使得减去一分钟将始终是一分钟之前的持续时间。 这可能导致本地日期时间改变一分钟以外的数量。 请注意,这与日,月和年使用的方法不同。
此实例是不可变的,不受此方法调用的影响。
- 参数
-
minutes
- 要减去的分钟数,可能是负数 - 结果
- 基于此日期时间的
ZonedDateTime
,减去分钟数,不为空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
minusSeconds
public ZonedDateTime minusSeconds(long seconds)
返回此ZonedDateTime
的副本,并减去指定的秒数。这在即时时间线上操作,使得减去一秒将总是提前一秒的持续时间。 这可能导致本地日期时间改变一秒以外的数量。 请注意,这与日,月和年使用的方法不同。
此实例是不可变的,不受此方法调用的影响。
- 参数
-
seconds
- 要减去的秒数,可能是负数 - 结果
- a
ZonedDateTime
基于此日期时间减去秒数,不为空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
minusNanos
public ZonedDateTime minusNanos(long nanos)
返回此ZonedDateTime
的副本,减去指定的纳秒数。这在即时时间线上操作,使得减去一个纳米将总是早一个纳米的持续时间。 这可能导致本地日期时间改变一纳米以外的量。 请注意,这与日,月和年使用的方法不同。
此实例是不可变的,不受此方法调用的影响。
- 参数
-
nanos
- 减去nanos
,可能是负数 - 结果
- 基于此日期时间的
ZonedDateTime
减去纳秒,而不是空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
query
public <R> R query(TemporalQuery<R> query)
使用指定的查询查询此日期时间。这将使用指定的查询策略对象查询此日期时间。
TemporalQuery
对象定义用于获取结果的逻辑。 阅读查询文档以了解此方法的结果。通过在指定的查询上调用
TemporalQuery.queryFrom(TemporalAccessor)
方法作为参数传递this
来获得此方法的结果。- Specified by:
-
query
在界面ChronoZonedDateTime<LocalDate>
- Specified by:
-
query
在界面TemporalAccessor
- 参数类型
-
R
- 结果的类型 - 参数
-
query
- 要调用的查询,而不是null - 结果
- 查询结果,可以返回null(由查询定义)
- 异常
-
DateTimeException
- 如果无法查询(由查询定义) -
ArithmeticException
- 如果发生数字溢出(由查询定义)
-
until
public long until(Temporal endExclusive, TemporalUnit unit)
根据指定的单位计算到另一个日期时间的时间量。这将根据单个
TemporalUnit
计算两个ZonedDateTime
对象之间的时间量。 起点和终点是this
和指定的日期时间。 如果结束在开始之前,结果将是否定的。 例如,可以使用startDateTime.until(endDateTime, DAYS)
计算两个日期时间之间的天startDateTime.until(endDateTime, DAYS)
。所述
Temporal
传递给此方法被转换为ZonedDateTime
使用from(TemporalAccessor)
。 如果两个分区日期时间之间的时区不同,则将指定的结束日期时间标准化为与此日期时间具有相同的区域。计算返回一个整数,表示两个日期之间的完整单位数。 例如,2012-06-15T00:00Z和2012-08-14T23:59Z之间的月份数量仅为一个月,因为它比两个月短一分钟。
使用此方法有两种等效方法。 第一种是调用此方法。 第二种是使用
TemporalUnit.between(Temporal, Temporal)
:// these two lines are equivalent amount = start.until(end, MONTHS); amount = MONTHS.between(start, end);
应该根据哪个使代码更具可读性来做出选择。计算在
ChronoUnit
的此方法中实现 。 单位NANOS
,MICROS
,MILLIS
,SECONDS
,MINUTES
,HOURS
和HALF_DAYS
,DAYS
,WEEKS
,MONTHS
,YEARS
,DECADES
,CENTURIES
,MILLENNIA
和ERAS
支持。 其他ChronoUnit
值将引发异常。日期和时间单位的计算不同。
日期单位使用本地日期时间在本地时间线上运行。 例如,无论是否有夏令时变化,从第1天中午到第二天中午(以天为单位)的时间段将始终被计为恰好一天。
时间单位在即时时间线上运行。 计算有效地将分区日期时间转换为时刻,然后计算时刻之间的时间段。 例如,从第1天中午到第二天中午(以小时为单位)的时段可以是23,24或25小时(或一些其他数量),这取决于是否有夏令时变化。
如果该单元不是
ChronoUnit
,则此方法的结果是通过调用获得TemporalUnit.between(Temporal, Temporal)
传递this
作为第一个参数和转换后的输入时间作为第二个参数。此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
until
in interfaceTemporal
- 参数
-
endExclusive
- 结束日期,不包括,转换为ZonedDateTime
,不为空 -
unit
- 计量金额的单位,而不是空 - 结果
- 此日期时间与结束日期时间之间的时间量
- 异常
-
DateTimeException
- 如果金额无法计算,或者结束时间不能转换为ZonedDateTime
-
UnsupportedTemporalTypeException
- 如果不支持该装置 -
ArithmeticException
- 如果发生数字溢出
-
format
public String format(DateTimeFormatter formatter)
使用指定的格式化程序格式化此日期时间。此日期时间将传递给格式化程序以生成字符串。
- Specified by:
-
format
,界面ChronoZonedDateTime<LocalDate>
- 参数
-
formatter
- 要使用的格式化程序,而不是null - 结果
- 格式化的日期时间字符串,不为空
- 异常
-
DateTimeException
- 如果在打印期间发生错误
-
toOffsetDateTime
public OffsetDateTime toOffsetDateTime()
将此日期时间转换为OffsetDateTime
。这将使用本地日期时间和偏移量创建偏移日期时间。 区域ID被忽略。
- 结果
- 偏移日期时间,表示相同的本地日期时间和偏移量,不为空
-
equals
public boolean equals(Object obj)
检查此日期时间是否等于另一个日期时间。比较基于偏移日期时间和区域。 仅比较类型为
ZonedDateTime
对象,其他类型返回false。- Specified by:
-
equals
在界面ChronoZonedDateTime<LocalDate>
- 重写:
-
equals
在课程Object
- 参数
-
obj
- 要检查的对象,null返回false - 结果
- 如果这等于其他日期时间,则为true
- 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
此日期时间的哈希码。- Specified by:
-
hashCode
在界面ChronoZonedDateTime<LocalDate>
- 重写:
-
hashCode
在课程Object
- 结果
- 合适的哈希码
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
toString
public String toString()
将此日期时间输出为String
,例如2007-12-03T10:15:30+01:00[Europe/Paris]
。格式包括
LocalDateTime
后跟ZoneOffset
。 如果ZoneId
与偏移量不同,则输出ID。 如果偏移和ID相同,则输出与ISO-8601兼容。- Specified by:
-
toString
在界面ChronoZonedDateTime<LocalDate>
- 重写:
-
toString
在课程Object
- 结果
- a string representation of this date-time, not null
-
-