D
- 此日期时间的具体类型
public interface ChronoZonedDateTime<D extends ChronoLocalDate> extends Temporal, Comparable<ChronoZonedDateTime<?>>
大多数应用程序应该声明方法签名,字段和变量为ZonedDateTime
,而不是此接口。
A ChronoZonedDateTime
是偏移日期时间的抽象表示,其中Chronology chronology
或日历系统是可插拔的。 日期时间由TemporalField
表示的字段定义,其中大多数常见实现在ChronoField
中定义。 年表定义日历系统的运行方式和标准字段的含义。
ZonedDateTime
而不是该接口,即使在应用程序需要处理多个日历系统的情况下。
在ChronoLocalDate
中详细探讨了这一点的理由 。
确保在讨论ChronoLocalDate
已经阅读并使用此接口之前的理解。
Modifier and Type | Method and Description |
---|---|
default int |
compareTo(ChronoZonedDateTime<?> other)
将此日期时间与其他日期时间进行比较,包括年表。
|
boolean |
equals(Object obj)
检查这个日期时间是否等于另一个日期时间。
|
default String |
format(DateTimeFormatter formatter)
使用指定的格式化程序格式化此日期时间。
|
static ChronoZonedDateTime<?> |
from(TemporalAccessor temporal)
从时间对象获取一个
ChronoZonedDateTime 的实例。
|
default int |
get(TemporalField field)
获取指定字段的
int 。
|
default Chronology |
getChronology()
获得这个日期时间的年表。
|
default long |
getLong(TemporalField field)
获取指定字段的
long 。
|
ZoneOffset |
getOffset()
获取区域偏移量,例如“+01:00”。
|
ZoneId |
getZone()
获取区域ID,例如“欧洲/巴黎”。
|
int |
hashCode()
这个日期时间的哈希码。
|
default boolean |
isAfter(ChronoZonedDateTime<?> other)
检查此日期时间是否在指定的日期时间之后。
|
default boolean |
isBefore(ChronoZonedDateTime<?> other)
检查此日期时间是否在指定的日期时间之前。
|
default boolean |
isEqual(ChronoZonedDateTime<?> other)
检查此日期时间的时间是否等于指定的日期时间。
|
boolean |
isSupported(TemporalField field)
检查指定的字段是否受支持。
|
default boolean |
isSupported(TemporalUnit unit)
检查指定的单位是否受支持。
|
default ChronoZonedDateTime<D> |
minus(long amountToSubtract, TemporalUnit unit)
返回与该对象相同类型的对象,并减去指定的时间段。
|
default ChronoZonedDateTime<D> |
minus(TemporalAmount amount)
返回与该对象相同类型的对象,并减去一个数量。
|
ChronoZonedDateTime<D> |
plus(long amountToAdd, TemporalUnit unit)
返回与此对象相同类型的对象,并添加指定的句点。
|
default ChronoZonedDateTime<D> |
plus(TemporalAmount amount)
返回与此对象相同类型的对象,并添加一个金额。
|
default <R> R |
query(TemporalQuery<R> query)
使用指定的查询查询此日期时间。
|
default ValueRange |
range(TemporalField field)
获取指定字段的有效值的范围。
|
static Comparator<ChronoZonedDateTime<?>> |
timeLineOrder()
获取比较,比较
ChronoZonedDateTime 在时间顺序忽略年表。
|
default long |
toEpochSecond()
将此日期时间转换为从1970-01-01T00:00:00Z的时期开始的秒数。
|
default Instant |
toInstant()
将此日期时间转换为
Instant 。
|
default D |
toLocalDate()
获取此日期时间的本地日期部分。
|
ChronoLocalDateTime<D> |
toLocalDateTime()
获取此日期时间的本地日期时间部分。
|
default LocalTime |
toLocalTime()
获取此日期时间的当地时间部分。
|
String |
toString()
将此日期时间输出为
String 。
|
default ChronoZonedDateTime<D> |
with(TemporalAdjuster adjuster)
通过进行调整,返回与该对象相同类型的调整对象。
|
ChronoZonedDateTime<D> |
with(TemporalField field, long newValue)
返回与该对象具有相同类型的对象,并更改指定的字段。
|
ChronoZonedDateTime<D> |
withEarlierOffsetAtOverlap()
将本日期时间的副本返回到本地时间线重叠处,将区域偏移更改为两个有效偏移量的较早者。
|
ChronoZonedDateTime<D> |
withLaterOffsetAtOverlap()
返回此日期的副本,将区域偏移更改为本地时间线重叠的两个有效偏移量的后面。
|
ChronoZonedDateTime<D> |
withZoneSameInstant(ZoneId zone)
使用不同的时区返回此日期时间的副本,保留即时。
|
ChronoZonedDateTime<D> |
withZoneSameLocal(ZoneId zone)
使用不同的时区返回此ZonedDateTime的副本,如果可能,保留本地日期时间。
|
static Comparator<ChronoZonedDateTime<?>> timeLineOrder()
ChronoZonedDateTime
的时间顺序,忽略年表。
这个比较器从在比较不同compareTo(java.time.chrono.ChronoZonedDateTime<?>)
在于其只比较底层时刻和不年表。 这允许根据即时时间线上的日期时间的位置来比较不同日历系统中的日期。 潜在的比较相当于比较第二纪和第二秒。
static ChronoZonedDateTime<?> from(TemporalAccessor temporal)
ChronoZonedDateTime
的实例。
这将根据指定的时间创建一个划区的日期时间。 A TemporalAccessor
表示日期和时间信息的任意集合,该工厂将其转换为ChronoZonedDateTime
一个实例。
转换提取并结合时间对象的年表,日期,时间和区域。 该行为相当于使用Chronology.zonedDateTime(TemporalAccessor)
与提取的年表。 允许实现执行优化,例如访问与相关对象相当的那些字段。
该方法中,功能接口的签名相匹配TemporalQuery
允许它被用作通过方法参考,查询ChronoZonedDateTime::from
。
temporal
- 要转换的时间对象,不为null
DateTimeException
- 如果无法转换为
ChronoZonedDateTime
Chronology.zonedDateTime(TemporalAccessor)
default ValueRange range(TemporalField field)
TemporalAccessor
复制
所有字段可以表示为long
整数。 此方法返回描述该值的有效范围的对象。 该时间对象的值用于提高返回范围的精度。 如果日期时间无法返回范围,因为该字段不受支持或由于其他原因,将抛出异常。
请注意,结果仅描述最小和最大有效值,重要的是不要太多读取它们。 例如,可以在该范围内的值对该字段无效。
range
在接口
TemporalAccessor
field
- 查询范围的字段,不为null
default int get(TemporalField field)
TemporalAccessor
复制
int
。
这将查询指定字段的值的日期时间。 返回的值将始终在该字段的值的有效范围内。 如果日期时间不能返回值,因为该字段不受支持或由于其他原因,将抛出异常。
get
在接口
TemporalAccessor
field
- 要获取的字段,不为null
default long getLong(TemporalField field)
TemporalAccessor
复制
long
。
这将查询指定字段的值的日期时间。 返回的值可能在该字段的值的有效范围之外。 如果日期时间不能返回值,因为该字段不受支持或由于其他原因,将抛出异常。
getLong
在接口
TemporalAccessor
field
- 要获取的字段,不为null
default D toLocalDate()
这将返回与此日期时间相同的年,月和日的本地日期。
default LocalTime toLocalTime()
这将返回本地时间与这个日期时间相同的小时,分钟,秒和纳秒。
ChronoLocalDateTime<D> toLocalDateTime()
这将返回与此日期时间相同的年,月和日的本地日期。
default Chronology getChronology()
Chronology
代表正在使用的日历系统。 ChronoField
中的时代和其他领域是按时间顺序定义的。
ZoneOffset getOffset()
这是当地时间与UTC /格林威治的抵消。
ZoneId getZone()
这将返回用于确定时区规则的存储的时区ID。
ChronoZonedDateTime<D> withEarlierOffsetAtOverlap()
当本地时间线重叠时,例如在秋季夏令时切换时,此方法仅有效果。 在这种情况下,本地日期时间有两个有效的偏移量。 调用此方法将返回一个分区的日期时间,其中选择的两个之前的早期。
如果在不重叠的情况下调用此方法,则返回this
。
此实例是不可变的,不受此方法调用的影响。
ZoneChronoDateTime
基于这个日期时间与较早的偏移量,不为null
DateTimeException
- 如果没有找到该区域的规则
DateTimeException
- 如果没有规则在此日期时间内有效
ChronoZonedDateTime<D> withLaterOffsetAtOverlap()
当本地时间线重叠时,例如在秋季夏令时切换时,此方法仅有效果。 在这种情况下,本地日期时间有两个有效的偏移量。 调用此方法将返回一个分区的日期时间,后两个选择。
如果此方法不重叠时this
则返回this
。
此实例是不可变的,不受此方法调用的影响。
ChronoZonedDateTime
基于这个日期时间与稍后的偏移量,不为null
DateTimeException
- 如果没有找到该区域的规则
DateTimeException
- 如果没有规则在此日期时间内有效
ChronoZonedDateTime<D> withZoneSameLocal(ZoneId zone)
此方法更改时区并保留本地日期时间。 仅当新的区域无效时,才会更改本地日期时间。
要更改区域并调整本地日期时间,请使用withZoneSameInstant(ZoneId)
。
此实例是不可变的,不受此方法调用的影响。
zone
- 时区改为,不为空
ChronoZonedDateTime
基于这个日期时间与请求的区域,不为null
ChronoZonedDateTime<D> withZoneSameInstant(ZoneId zone)
该方法更改时区并保留即时。 这通常会导致本地日期时间的更改。
该方法基于保留相同的时刻,因此本地时间线上的间隙和重叠对结果没有影响。
要保持本地时间更改偏移量,请使用withZoneSameLocal(ZoneId)
。
zone
- 要更改的时区,不为空
ChronoZonedDateTime
基于此日期时间与请求的区域,不为null
DateTimeException
- 如果结果超出支持的日期范围
boolean isSupported(TemporalField field)
这将检查是否可以在此日期时间查询指定的字段。 如果是假,然后调用range
, get
和with(TemporalField, long)
方法会抛出异常。
一组支持的字段由年表定义,通常包括所有ChronoField
字段。
如果该字段是不是一个ChronoField
,则此方法的结果是通过调用获得TemporalField.isSupportedBy(TemporalAccessor)
传递this
作为参数。 字段是否受支持由字段决定。
isSupported
在界面
TemporalAccessor
field
- 要检查的字段,null返回false
default boolean isSupported(TemporalUnit unit)
这将检查是否可以从此日期时间添加或减去指定的单位。 如果是false,那么调用plus(long, TemporalUnit)
和minus
方法会抛出异常。
支持单位的集合由年表定义,通常包括除FOREVER
之外的所有ChronoUnit
单位。
如果该单元不是ChronoUnit
,则此方法的结果是通过调用获得TemporalUnit.isSupportedBy(Temporal)
传递this
作为参数。 设备是否受支持由本机决定。
isSupported
在界面
Temporal
unit
- 要检查的单位,null返回false
default ChronoZonedDateTime<D> with(TemporalAdjuster adjuster)
这将根据指定的调整器的规则调整此日期时间。 一个简单的调整器可能只是设置一个字段,如年份字段。 更复杂的调整器可能会将日期设置为该月的最后一天。 TemporalAdjuster
中提供了一些常见的调整 。 这些包括找到“月的最后一天”和“下周三”。 调整员负责处理特殊情况,如月份和闰年的不同长度。
一些示例代码,指示如何和为什么使用此方法:
date = date.with(Month.JULY); // most key classes implement TemporalAdjuster
date = date.with(lastDayOfMonth()); // static import from Adjusters
date = date.with(next(WEDNESDAY)); // static import from Adjusters and DayOfWeek
with
在界面
Temporal
adjuster
- 调整器使用,不为空
DateTimeException
- 如果不能进行调整
ArithmeticException
- 如果发生数字溢出
ChronoZonedDateTime<D> with(TemporalField field, long newValue)
这将返回一个基于该对象的新对象,其中指定字段的值已更改。 例如,在LocalDate
,这可以用于设置年,月或月的日期。 返回的对象将具有与该对象相同的可观察类型。
在某些情况下,更改字段尚未完全定义。 例如,如果目标对象是代表1月31日的日期,则将月份更改为2月份将不清楚。 在这种情况下,该领域负责解决结果。 通常,它将选择先前的有效日期,这将是本例中最后一个有效的二月份。
with
在接口
Temporal
field
- 要在结果中设置的字段,不为null
newValue
- 结果中字段的新值
DateTimeException
- 如果该字段无法设置
ArithmeticException
- 如果发生数字溢出
default ChronoZonedDateTime<D> plus(TemporalAmount amount)
这调整这个时间,根据指定量的规则添加。 量通常为Period
,而可以是任何其他类型的实现TemporalAmount
接口,如Duration
。
一些示例代码,指示如何和为什么使用此方法:
date = date.plus(period); // add a Period instance
date = date.plus(duration); // add a Duration instance
date = date.plus(workingDays(6)); // example user-written workingDays method
请注意,呼叫plus
后跟minus
不保证返回相同的日期时间。
plus
在界面
Temporal
amount
- 要添加的金额,不为null
DateTimeException
- 如果不能添加
ArithmeticException
- 如果发生数字溢出
ChronoZonedDateTime<D> plus(long amountToAdd, TemporalUnit unit)
此方法基于添加了指定句点的新对象。 例如,在LocalDate
,这可以用来添加几年,几个月或几天。 返回的对象将具有与该对象相同的可观察类型。
在某些情况下,更改字段尚未完全定义。 例如,如果目标对象是代表1月31日的日期,则添加一个月将不清楚。 在这种情况下,该领域负责解决结果。 通常,它将选择先前的有效日期,这将是本例中最后一个有效的二月份。
plus
在接口
Temporal
amountToAdd
- 要添加的指定单位的数量,可能为负数
unit
- 要添加的单位,不为空
DateTimeException
- 如果不能添加单位
ArithmeticException
- 如果发生数字溢出
default ChronoZonedDateTime<D> minus(TemporalAmount amount)
这调整这个时间,根据指定量的规则减去。 量通常为Period
,而可以是任何其他类型的实现TemporalAmount
接口,如Duration
。
一些示例代码,指示如何和为什么使用此方法:
date = date.minus(period); // subtract a Period instance
date = date.minus(duration); // subtract a Duration instance
date = date.minus(workingDays(6)); // example user-written workingDays method
请注意,呼叫plus
后跟minus
不保证返回相同的日期时间。
minus
在接口
Temporal
amount
- 减去量,不为null
DateTimeException
- 如果不能进行减法
ArithmeticException
- 如果发生数字溢出
default ChronoZonedDateTime<D> minus(long amountToSubtract, TemporalUnit unit)
该方法返回一个基于该对象的新对象,减去指定的时间段。 例如,在LocalDate
,这可以用来减去几年,几个月或几天。 返回的对象将具有与该对象相同的可观察类型。
在某些情况下,更改字段尚未完全定义。 例如,如果目标对象是代表3月31日的日期,则减去一个月将不清楚。 在这种情况下,该领域负责解决结果。 通常,它将选择先前的有效日期,这将是本例中最后一个有效的二月份。
minus
在接口
Temporal
amountToSubtract
- 减去指定单位的金额,可能为负数
unit
- 减去期间的单位,不为空
DateTimeException
- 如果不能减去单位
ArithmeticException
- 如果发生数字溢出
default <R> R query(TemporalQuery<R> query)
这将使用指定的查询策略对象查询此日期时间。 TemporalQuery
对象定义了用于获取结果的逻辑。 阅读查询的文档,以了解该方法的结果。
该方法的结果是通过在指定的查询this
作为参数调用TemporalQuery.queryFrom(TemporalAccessor)
方法获得的。
query
在界面
TemporalAccessor
R
- 结果的类型
query
- 要调用的查询,不为null
DateTimeException
- 如果无法查询(由查询定义)
ArithmeticException
- 如果发生数字溢出(由查询定义)
default String format(DateTimeFormatter formatter)
这个日期时间将传递给格式化程序以生成一个字符串。
默认实现必须如下所示:
return formatter.format(this);
formatter
- 要使用的格式化程序,不为null
DateTimeException
- 打印时是否发生错误
default Instant toInstant()
Instant
。
这将返回一个Instant
,表示与此日期时间相同的时间点。 计算结合了local date-time和offset 。
Instant
表示相同的时刻,不为空
default long toEpochSecond()
这使用local date-time和offset来计算历元秒数值,这是从1970-01-01T00:00:00Z起经过的秒数。 时代之后的时代的实体是积极的,较早的是负的。
default int compareTo(ChronoZonedDateTime<?> other)
比较首先在瞬间,然后在当地的日期时间,然后在区域ID,然后在时间顺序。 这是“与equals一致”,被定义Comparable
。
如果所有被比较的日期时间对象都在相同的年表中,则不需要额外的年表。
此默认实现执行上面定义的比较。
compareTo
在接口
Comparable<ChronoZonedDateTime<?>>
other
- 其他日期时间来比较,不为null
default boolean isBefore(ChronoZonedDateTime<?> other)
此方法不同于在比较compareTo(java.time.chrono.ChronoZonedDateTime<?>)
在于其只比较的日期时间的时刻。 这相当于使用dateTime1.toInstant().isBefore(dateTime2.toInstant());
。
该默认实现基于第二纪和第二秒执行比较。
other
- 其他日期时间来比较,不为null
default boolean isAfter(ChronoZonedDateTime<?> other)
此方法不同于在比较compareTo(java.time.chrono.ChronoZonedDateTime<?>)
在于其只比较的日期时间的时刻。 这相当于使用dateTime1.toInstant().isAfter(dateTime2.toInstant());
。
该默认实现基于第二纪和第二秒执行比较。
other
- 与之对比的其他日期时间,不为空
default boolean isEqual(ChronoZonedDateTime<?> other)
该方法与compareTo(java.time.chrono.ChronoZonedDateTime<?>)
和equals(java.lang.Object)
中的比较不同之处在于它仅比较日期时间的时间。 这相当于使用dateTime1.toInstant().equals(dateTime2.toInstant());
。
该默认实现基于第二纪和第二秒执行比较。
other
- 其他日期时间来比较,不为null
boolean equals(Object obj)
比较是基于偏移日期时间和区域。 要在时间线上比较相同的时间,请使用compareTo(java.time.chrono.ChronoZonedDateTime<?>)
。 只比较类型为ChronoZonedDateTime
对象,其他类型返回false。
equals
在类别
Object
obj
- 要检查的对象,null返回false
Object.hashCode()
, HashMap
int hashCode()
hashCode
在类别
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)