- 类型参数:
-
D
- 此日期时间的日期的具体类型
- 所有超接口:
-
Comparable<ChronoLocalDateTime<?>>
,Temporal
,TemporalAccessor
,TemporalAdjuster
- 所有已知实现类:
-
LocalDateTime
大多数应用程序应将方法签名、字段和变量声明为LocalDateTime
,而不是此接口。
ChronoLocalDateTime
是本地日期时间的抽象表示,其中Chronology chronology
或日历系统是可插拔的。日期时间根据由TemporalField
表示的字段来定义,其中大多数常见实现在ChronoField
中定义。年表定义了日历系统的操作方式和标准字段的含义。
何时使用此接口
API的设计鼓励使用LocalDateTime
而不是此接口,即使在应用程序需要处理多个日历系统的情况下也是如此。这一原因在ChronoLocalDate
中有详细探讨。
在使用此接口之前,请确保已阅读并理解ChronoLocalDate
中的讨论。
- 实现要求:
- 必须小心实现此接口,以确保其他类能够正确运行。所有可实例化的实现必须是final、不可变且线程安全的。子类应尽可能实现Serializable。
- 自:
- 1.8
-
Method Summary
Modifier and TypeMethodDescriptiondefault Temporal
adjustInto
(Temporal temporal) 调整指定的时间对象,使其具有与此对象相同的日期和时间。将此时间与时区组合,创建一个ChronoZonedDateTime
。default int
compareTo
(ChronoLocalDateTime<?> other) 将此日期时间与另一个日期时间进行比较,包括年表。boolean
检查此日期时间是否等于另一个日期时间,包括年表。default String
format
(DateTimeFormatter formatter) 使用指定的格式化程序格式化此日期时间。static ChronoLocalDateTime
<?> from
(TemporalAccessor temporal) 从临时对象获取ChronoLocalDateTime
的实例。default Chronology
获取此日期时间的年表。int
hashCode()
此日期时间的哈希码。default boolean
isAfter
(ChronoLocalDateTime<?> other) 检查此日期时间是否在指定日期时间之后,忽略年表。default boolean
isBefore
(ChronoLocalDateTime<?> other) 检查此日期时间是否在指定日期时间之前,忽略年表。default boolean
isEqual
(ChronoLocalDateTime<?> other) 检查此日期时间是否等于指定日期时间,忽略年表。boolean
isSupported
(TemporalField field) 检查是否支持指定字段。default boolean
isSupported
(TemporalUnit unit) 检查是否支持指定单位。default ChronoLocalDateTime
<D> minus
(long amountToSubtract, TemporalUnit unit) 返回与从此对象减去的指定周期相同类型的对象。default ChronoLocalDateTime
<D> minus
(TemporalAmount amount) 返回与从此对象减去的数量相同类型的对象。plus
(long amountToAdd, TemporalUnit unit) 返回与添加的指定周期相同类型的对象。default ChronoLocalDateTime
<D> plus
(TemporalAmount amount) 返回与添加的数量相同类型的对象。default <R> R
query
(TemporalQuery<R> query) 使用指定查询查询此日期时间。static Comparator
<ChronoLocalDateTime<?>> 获取按时间线顺序比较ChronoLocalDateTime
的比较器,忽略年表。default long
toEpochSecond
(ZoneOffset offset) 将此日期时间转换为从1970-01-01T00:00:00Z时代开始的秒数。default Instant
toInstant
(ZoneOffset offset) 将此日期时间转换为Instant
。获取此日期时间的本地日期部分。获取此日期时间的本地时间部分。toString()
将此日期时间输出为String
。default ChronoLocalDateTime
<D> with
(TemporalAdjuster adjuster) 返回与此对象相同类型的调整后对象。with
(TemporalField field, long newValue) 返回与此对象的指定字段更改的相同类型的对象。Methods declared in interface java.time.temporal.TemporalAccessor
get, getLong, range
-
Method Details
-
timeLineOrder
获取按时间线顺序比较ChronoLocalDateTime
的比较器,忽略年表。此比较器与
compareTo(java.time.chrono.ChronoLocalDateTime<?>)
中的比较不同,因为它仅比较基础日期时间,而不比较年表。这允许根据日期时间在本地时间线上的位置比较不同日历系统中的日期。基础比较等同于比较时代日和纳秒日。- 返回:
- 一个按时间线顺序比较的比较器,忽略年表
- 参见:
-
from
从临时对象获取ChronoLocalDateTime
的实例。根据指定的临时对象获取本地日期时间。
TemporalAccessor
表示一组任意的日期和时间信息,此工厂将其转换为ChronoLocalDateTime
的实例。转换从临时对象中提取并组合年表和日期时间。行为等同于使用
Chronology.localDateTime(TemporalAccessor)
与提取的年表。实现允许执行优化,例如访问等效于相关对象的字段。此方法与函数接口
TemporalQuery
的签名匹配,允许通过方法引用ChronoLocalDateTime::from
将其用作查询。- 参数:
-
temporal
- 要转换的临时对象,不能为空 - 返回:
- 日期时间,不能为空
- 抛出:
-
DateTimeException
- 如果无法转换为ChronoLocalDateTime
- 参见:
-
getChronology
获取此日期时间的年表。Chronology
表示正在使用的日历系统。年代和其他字段在ChronoField
中由年表定义。- 返回:
- 年表,不能为空
-
toLocalDate
D toLocalDate()获取此日期时间的本地日期部分。返回具有与此日期时间相同年、月和日的本地日期。
- 返回:
- 此日期时间的日期部分,不能为空
-
toLocalTime
LocalTime toLocalTime()获取此日期时间的本地时间部分。返回具有与此日期时间相同小时、分钟、秒和纳秒的本地时间。
- 返回:
- 此日期时间的时间部分,不能为空
-
isSupported
检查是否支持指定字段。检查是否可以在此日期时间上查询指定字段。如果为false,则调用
range
、get
和with(TemporalField, long)
方法将抛出异常。支持的字段集由年表定义,通常包括所有
ChronoField
日期和时间字段。如果字段不是
ChronoField
,则通过调用TemporalField.isSupportedBy(TemporalAccessor)
传递this
作为参数来获取此方法的结果。字段是否受支持由字段确定。- 指定者:
-
isSupported
在接口TemporalAccessor
中 - 参数:
-
field
- 要检查的字段,null返回false - 返回:
- 如果字段可以查询,则为true,否则为false
-
isSupported
检查是否支持指定单位。检查是否可以将指定单位添加到或从此日期时间中减去。如果为false,则调用
plus(long, TemporalUnit)
和minus
方法将抛出异常。支持的单位集由年表定义,通常包括所有
ChronoUnit
单位,除了FOREVER
。如果单位不是
ChronoUnit
,则通过调用TemporalUnit.isSupportedBy(Temporal)
传递this
作为参数来获取此方法的结果。单位是否受支持由单位确定。- 指定者:
-
isSupported
在接口Temporal
中 - 参数:
-
unit
- 要检查的单位,null返回false - 返回:
- 如果可以添加/减去单位,则为true,否则为false
-
with
返回一个调整后的与此对象相同类型的对象,已进行调整。根据指定调整器的规则调整此日期时间。一个简单的调整器可能只是设置一个字段,比如年份字段。一个更复杂的调整器可能会将日期设置为该月的最后一天。在
TemporalAdjusters
中提供了一些常见的调整选项。这些包括查找“月末”和“下周三”。调整器负责处理特殊情况,例如月份的长度变化和闰年。以下是一些示例代码,说明了如何以及为什么使用此方法:
date = date.with(Month.JULY); // 大多数关键类实现TemporalAdjuster date = date.with(lastDayOfMonth()); // 从Adjusters进行静态导入 date = date.with(next(WEDNESDAY)); // 从Adjusters和DayOfWeek进行静态导入
- 指定者:
-
with
在接口Temporal
中 - 参数:
-
adjuster
- 要使用的调整器,不能为空 - 返回:
- 具有指定调整的相同类型的对象,不能为空
- 抛出:
-
DateTimeException
- 如果无法进行调整 -
ArithmeticException
- 如果发生数值溢出
-
with
返回一个与此对象相同类型的对象,其中指定字段已更改。根据指定字段更改值返回基于此对象的新对象。例如,在
LocalDate
上,可以用于设置年、月或日期。返回的对象将具有与此对象相同的可观察类型。在某些情况下,更改字段的定义不完全明确。例如,如果目标对象是代表1月31日的日期,则将月份更改为2月将是不明确的。在这种情况下,字段负责解析结果。通常它会选择前一个有效日期,例如在这个例子中是2月的最后一个有效日期。
- 指定者:
-
with
在接口Temporal
中 - 参数:
-
field
- 要在结果中设置的字段,不能为空 -
newValue
- 结果中字段的新值 - 返回:
- 具有指定字段设置的相同类型的对象,不能为空
- 抛出:
-
DateTimeException
- 如果无法设置字段 -
ArithmeticException
- 如果发生数值溢出
-
plus
返回一个与此对象相同类型的对象,已添加一定数量。根据指定数量的规则调整此时间,添加。数量通常是一个
Period
,但也可以是实现TemporalAmount
接口的任何其他类型,例如Duration
。以下是一些示例代码,说明了如何以及为什么使用此方法:
date = date.plus(period); // 添加一个Period实例 date = date.plus(duration); // 添加一个Duration实例 date = date.plus(workingDays(6)); // 示例用户编写的workingDays方法
请注意,调用
plus
后跟minus
不能保证返回相同的日期时间。- 指定者:
-
plus
在接口Temporal
中 - 参数:
-
amount
- 要添加的数量,不能为空 - 返回:
- 具有指定调整的相同类型的对象,不能为空
- 抛出:
-
DateTimeException
- 如果无法进行添加 -
ArithmeticException
- 如果发生数值溢出
-
plus
返回一个与此对象相同类型的对象,已添加指定的周期。此方法返回一个基于此对象的新对象,已添加指定的周期。例如,在
LocalDate
上,可以用于添加一定数量的年、月或天。返回的对象将具有与此对象相同的可观察类型。在某些情况下,更改字段的定义不完全明确。例如,如果目标对象是代表1月31日的日期,则添加一个月将是不明确的。在这种情况下,字段负责解析结果。通常它会选择前一个有效日期,例如在这个例子中是2月的最后一个有效日期。
- 指定者:
-
plus
在接口Temporal
中 - 参数:
-
amountToAdd
- 要添加的指定单位的数量,可以为负数 -
unit
- 要添加数量的单位,不能为空 - 返回:
- 具有指定周期添加的相同类型的对象,不能为空
- 抛出:
-
DateTimeException
- 如果无法添加单位 -
ArithmeticException
- 如果发生数值溢出
-
minus
返回一个与此对象相同类型的对象,已减去一定数量。根据指定数量的规则调整此时间,减去。数量通常是一个
Period
,但也可以是实现TemporalAmount
接口的任何其他类型,例如Duration
。以下是一些示例代码,说明了如何以及为什么使用此方法:
date = date.minus(period); // 减去一个Period实例 date = date.minus(duration); // 减去一个Duration实例 date = date.minus(workingDays(6)); // 示例用户编写的workingDays方法
请注意,调用
plus
后跟minus
不能保证返回相同的日期时间。- 指定者:
-
minus
在接口Temporal
中 - 参数:
-
amount
- 要减去的数量,不能为空 - 返回:
- 具有指定调整的相同类型的对象,不能为空
- 抛出:
-
DateTimeException
- 如果无法进行减法 -
ArithmeticException
- 如果发生数值溢出
-
minus
返回一个与此对象相同类型的对象,已减去指定的周期。此方法返回一个基于此对象的新对象,已减去指定的周期。例如,在
LocalDate
上,可以用于减去一定数量的年、月或天。返回的对象将具有与此对象相同的可观察类型。在某些情况下,更改字段的定义不完全明确。例如,如果目标对象是代表3月31日的日期,则减去一个月将是不明确的。在这种情况下,字段负责解析结果。通常它会选择前一个有效日期,例如在这个例子中是2月的最后一个有效日期。
- 指定者:
-
minus
在接口Temporal
中 - 参数:
-
amountToSubtract
- 要减去的指定单位的数量,可以为负数 -
unit
- 要减去数量的单位,不能为空 - 返回:
- 具有指定周期减去的相同类型的对象,不能为空
- 抛出:
-
DateTimeException
- 如果无法减去单位 -
ArithmeticException
- 如果发生数值溢出
-
query
使用指定的查询查询此日期时间。使用指定的查询策略对象查询此日期时间。
TemporalQuery
对象定义要用于获取结果的逻辑。阅读查询的文档以了解此方法的结果将是什么。此方法的结果是通过在指定查询上调用
TemporalQuery.queryFrom(TemporalAccessor)
方法来获取的,传递this
作为参数。- 指定者:
-
query
在接口TemporalAccessor
中指定 - 类型参数:
-
R
- 结果的类型 - 参数:
-
query
- 要调用的查询,不能为空 - 返回:
- 查询结果,可能返回null(由查询定义)
- 抛出:
-
DateTimeException
- 如果无法查询(由查询定义) -
ArithmeticException
- 如果发生数值溢出(由查询定义)
-
adjustInto
调整指定的时间对象,使其具有与此对象相同的日期和时间。返回一个与输入相同可观察类型的时间对象,日期和时间更改为与此相同。
该调整等同于两次使用
Temporal.with(TemporalField, long)
,传递ChronoField.EPOCH_DAY
和ChronoField.NANO_OF_DAY
作为字段。在大多数情况下,通过使用
Temporal.with(TemporalAdjuster)
来颠倒调用模式更清晰:// 这两行是等效的,但推荐第二种方法 temporal = thisLocalDateTime.adjustInto(temporal); temporal = temporal.with(thisLocalDateTime);
此实例是不可变的,不受此方法调用的影响。
- 指定者:
-
adjustInto
在接口TemporalAdjuster
中指定 - 参数:
-
temporal
- 要调整的目标对象,不能为空 - 返回:
- 调整后的对象,不能为空
- 抛出:
-
DateTimeException
- 如果无法进行调整 -
ArithmeticException
- 如果发生数值溢出
-
format
使用指定的格式化程序格式化此日期时间。将此日期时间传递给格式化程序以生成一个字符串。
默认实现必须表现如下:
return formatter.format(this);
- 参数:
-
formatter
- 要使用的格式化程序,不能为空 - 返回:
- 格式化后的日期时间字符串,不能为空
- 抛出:
-
DateTimeException
- 如果在打印过程中发生错误
-
atZone
将此时间与时区组合以创建一个ChronoZonedDateTime
。返回一个
ChronoZonedDateTime
,由此日期时间在指定时区形成。结果将尽可能与此日期时间匹配。时区规则,如夏令时,意味着并非每个本地日期时间对于指定的时区都是有效的,因此本地日期时间可能会被调整。本地日期时间将解析为时间线上的单个时刻。这是通过找到由时区ID的规则定义的本地日期时间相对于UTC /格林威治的有效偏移来实现的。
在大多数情况下,本地日期时间只有一个有效偏移。在重叠的情况下,其中时钟被设置回去,有两个有效偏移。此方法使用通常对应于“夏季”的较早偏移。
在跳跃的情况下,其中时钟向前跳跃,没有有效偏移。相反,本地日期时间将调整为晚于跳跃长度的时间。对于典型的一小时夏令时更改,本地日期时间将被移动到一个小时后,进入通常对应于“夏季”的偏移。
要在重叠时获得较晚的偏移,请在此方法的结果上调用
ChronoZonedDateTime.withLaterOffsetAtOverlap()
。- 参数:
-
zone
- 要使用的时区,不能为空 - 返回:
- 由此日期时间形成的带时区的日期时间,不能为空
-
toInstant
将此日期时间转换为Instant
。将此本地日期时间与指定的偏移组合以形成一个
Instant
。此默认实现从日期的纪元日和时间的一天中计算。
- 参数:
-
offset
- 用于转换的偏移,不能为空 - 返回:
-
表示相同时刻的
Instant
,不能为空
-
toEpochSecond
将此日期时间转换为从1970-01-01T00:00:00Z的纪元开始的秒数。将此本地日期时间与指定的偏移组合以计算纪元秒值,即从1970-01-01T00:00:00Z开始经过的秒数。纪元后的时间线上的时刻为正,之前为负。
此默认实现从日期的纪元日和时间的一天中计算。
- 参数:
-
offset
- 用于转换的偏移,不能为空 - 返回:
- 从1970-01-01T00:00:00Z的纪元开始的秒数
-
compareTo
将此日期时间与另一个日期时间进行比较,包括年表。比较首先基于基础时间线日期时间,然后基于年表。它是“与equals一致”的,如
Comparable
定义的。例如,以下是比较器顺序:
2012-12-03T12:00 (ISO)
2012-12-04T12:00 (ISO)
2555-12-04T12:00 (ThaiBuddhist)
2012-12-05T12:00 (ISO)
如果所有被比较的日期时间对象都在同一年表中,则不需要额外的年表阶段,只使用本地日期时间。
此默认实现执行上述定义的比较。
- 指定者:
-
compareTo
在接口Comparable<D extends ChronoLocalDate>
中指定 - 参数:
-
other
- 要比较的另一个日期时间,不能为空 - 返回:
-
比较器值,即此本地日期时间与
other
本地日期时间以及此年表与other
年表的比较,按顺序返回第一个非零结果,否则返回零 - 参见:
-
isAfter
检查此日期时间是否在指定日期时间之后,忽略年表。此方法与
compareTo(java.time.chrono.ChronoLocalDateTime<?>)
中的比较不同,因为它仅比较基础日期时间而不比较年表。这允许根据时间线位置比较不同日历系统中的日期。此默认实现基于纪元日和一天中的纳秒执行比较。
- 参数:
-
other
- 要比较的另一个日期时间,不能为空 - 返回:
- 如果此日期时间在指定日期时间之后,则为true
-
isBefore
检查此日期时间是否在指定日期时间之前,忽略年表。此方法与
compareTo(java.time.chrono.ChronoLocalDateTime<?>)
中的比较不同,因为它仅比较基础日期时间而不比较年表。这允许根据时间线位置比较不同日历系统中的日期。此默认实现基于纪元日和一天中的纳秒执行比较。
- 参数:
-
other
- 要比较的另一个日期时间,不能为空 - 返回:
- 如果此日期时间在指定日期时间之前,则为true
-
isEqual
检查此日期时间是否等于指定日期时间,忽略年表。此方法与
compareTo(java.time.chrono.ChronoLocalDateTime<?>)
中的比较不同,因为它仅比较基础日期和时间而不比较年表。这允许根据时间线位置比较不同日历系统中的日期。此默认实现基于纪元日和一天中的纳秒执行比较。
- 参数:
-
other
- 要比较的另一个日期时间,不能为空 - 返回:
- 如果基础日期时间等于时间线上的指定日期时间,则为true
-
equals
检查此日期时间是否等于另一个日期时间,包括年表。将此日期时间与另一个日期时间进行比较,确保日期时间和年表相同。
-
hashCode
int hashCode()这个日期时间的哈希码。 -
toString
String toString()将此日期时间输出为一个String
。输出将包括完整的本地日期时间。
-