Module java.base
Package java.time.chrono

Interface ChronoLocalDateTime<D extends ChronoLocalDate>

类型参数:
D - 此日期时间的日期的具体类型
所有超接口:
Comparable<ChronoLocalDateTime<?>>, Temporal, TemporalAccessor, TemporalAdjuster
所有已知实现类:
LocalDateTime

public interface ChronoLocalDateTime<D extends ChronoLocalDate> extends Temporal, TemporalAdjuster, Comparable<ChronoLocalDateTime<?>>
一个没有时区的任意年表的日期时间,用于高级全球化用例。

大多数应用程序应将方法签名、字段和变量声明为LocalDateTime,而不是此接口。

ChronoLocalDateTime是本地日期时间的抽象表示,其中Chronology chronology或日历系统是可插拔的。日期时间根据由TemporalField表示的字段来定义,其中大多数常见实现在ChronoField中定义。年表定义了日历系统的操作方式和标准字段的含义。

何时使用此接口

API的设计鼓励使用LocalDateTime而不是此接口,即使在应用程序需要处理多个日历系统的情况下也是如此。这一原因在ChronoLocalDate中有详细探讨。

在使用此接口之前,请确保已阅读并理解ChronoLocalDate中的讨论。

实现要求:
必须小心实现此接口,以确保其他类能够正确运行。所有可实例化的实现必须是final、不可变且线程安全的。子类应尽可能实现Serializable。
自:
1.8
  • Method Details

    • timeLineOrder

      static Comparator<ChronoLocalDateTime<?>> timeLineOrder()
      获取按时间线顺序比较ChronoLocalDateTime的比较器,忽略年表。

      此比较器与compareTo(java.time.chrono.ChronoLocalDateTime<?>)中的比较不同,因为它仅比较基础日期时间,而不比较年表。这允许根据日期时间在本地时间线上的位置比较不同日历系统中的日期。基础比较等同于比较时代日和纳秒日。

      返回:
      一个按时间线顺序比较的比较器,忽略年表
      参见:
    • from

      static ChronoLocalDateTime<?> from(TemporalAccessor temporal)
      从临时对象获取ChronoLocalDateTime的实例。

      根据指定的临时对象获取本地日期时间。 TemporalAccessor表示一组任意的日期和时间信息,此工厂将其转换为ChronoLocalDateTime的实例。

      转换从临时对象中提取并组合年表和日期时间。行为等同于使用Chronology.localDateTime(TemporalAccessor)与提取的年表。实现允许执行优化,例如访问等效于相关对象的字段。

      此方法与函数接口TemporalQuery的签名匹配,允许通过方法引用ChronoLocalDateTime::from将其用作查询。

      参数:
      temporal - 要转换的临时对象,不能为空
      返回:
      日期时间,不能为空
      抛出:
      DateTimeException - 如果无法转换为ChronoLocalDateTime
      参见:
    • getChronology

      default Chronology getChronology()
      获取此日期时间的年表。

      Chronology表示正在使用的日历系统。年代和其他字段在ChronoField中由年表定义。

      返回:
      年表,不能为空
    • toLocalDate

      D toLocalDate()
      获取此日期时间的本地日期部分。

      返回具有与此日期时间相同年、月和日的本地日期。

      返回:
      此日期时间的日期部分,不能为空
    • toLocalTime

      LocalTime toLocalTime()
      获取此日期时间的本地时间部分。

      返回具有与此日期时间相同小时、分钟、秒和纳秒的本地时间。

      返回:
      此日期时间的时间部分,不能为空
    • isSupported

      boolean isSupported(TemporalField field)
      检查是否支持指定字段。

      检查是否可以在此日期时间上查询指定字段。如果为false,则调用rangegetwith(TemporalField, long)方法将抛出异常。

      支持的字段集由年表定义,通常包括所有ChronoField日期和时间字段。

      如果字段不是ChronoField,则通过调用TemporalField.isSupportedBy(TemporalAccessor)传递this作为参数来获取此方法的结果。字段是否受支持由字段确定。

      指定者:
      isSupported 在接口 TemporalAccessor
      参数:
      field - 要检查的字段,null返回false
      返回:
      如果字段可以查询,则为true,否则为false
    • isSupported

      default boolean isSupported(TemporalUnit unit)
      检查是否支持指定单位。

      检查是否可以将指定单位添加到或从此日期时间中减去。如果为false,则调用plus(long, TemporalUnit)minus方法将抛出异常。

      支持的单位集由年表定义,通常包括所有ChronoUnit单位,除了FOREVER

      如果单位不是ChronoUnit,则通过调用TemporalUnit.isSupportedBy(Temporal)传递this作为参数来获取此方法的结果。单位是否受支持由单位确定。

      指定者:
      isSupported 在接口 Temporal
      参数:
      unit - 要检查的单位,null返回false
      返回:
      如果可以添加/减去单位,则为true,否则为false
    • with

      default ChronoLocalDateTime<D> with(TemporalAdjuster adjuster)
      返回一个调整后的与此对象相同类型的对象,已进行调整。

      根据指定调整器的规则调整此日期时间。一个简单的调整器可能只是设置一个字段,比如年份字段。一个更复杂的调整器可能会将日期设置为该月的最后一天。在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

      ChronoLocalDateTime<D> with(TemporalField field, long newValue)
      返回一个与此对象相同类型的对象,其中指定字段已更改。

      根据指定字段更改值返回基于此对象的新对象。例如,在LocalDate上,可以用于设置年、月或日期。返回的对象将具有与此对象相同的可观察类型。

      在某些情况下,更改字段的定义不完全明确。例如,如果目标对象是代表1月31日的日期,则将月份更改为2月将是不明确的。在这种情况下,字段负责解析结果。通常它会选择前一个有效日期,例如在这个例子中是2月的最后一个有效日期。

      指定者:
      with 在接口 Temporal
      参数:
      field - 要在结果中设置的字段,不能为空
      newValue - 结果中字段的新值
      返回:
      具有指定字段设置的相同类型的对象,不能为空
      抛出:
      DateTimeException - 如果无法设置字段
      ArithmeticException - 如果发生数值溢出
    • plus

      default ChronoLocalDateTime<D> plus(TemporalAmount amount)
      返回一个与此对象相同类型的对象,已添加一定数量。

      根据指定数量的规则调整此时间,添加。数量通常是一个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

      ChronoLocalDateTime<D> plus(long amountToAdd, TemporalUnit unit)
      返回一个与此对象相同类型的对象,已添加指定的周期。

      此方法返回一个基于此对象的新对象,已添加指定的周期。例如,在LocalDate上,可以用于添加一定数量的年、月或天。返回的对象将具有与此对象相同的可观察类型。

      在某些情况下,更改字段的定义不完全明确。例如,如果目标对象是代表1月31日的日期,则添加一个月将是不明确的。在这种情况下,字段负责解析结果。通常它会选择前一个有效日期,例如在这个例子中是2月的最后一个有效日期。

      指定者:
      plus 在接口 Temporal
      参数:
      amountToAdd - 要添加的指定单位的数量,可以为负数
      unit - 要添加数量的单位,不能为空
      返回:
      具有指定周期添加的相同类型的对象,不能为空
      抛出:
      DateTimeException - 如果无法添加单位
      ArithmeticException - 如果发生数值溢出
    • minus

      default ChronoLocalDateTime<D> minus(TemporalAmount amount)
      返回一个与此对象相同类型的对象,已减去一定数量。

      根据指定数量的规则调整此时间,减去。数量通常是一个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

      default ChronoLocalDateTime<D> minus(long amountToSubtract, TemporalUnit unit)
      返回一个与此对象相同类型的对象,已减去指定的周期。

      此方法返回一个基于此对象的新对象,已减去指定的周期。例如,在LocalDate上,可以用于减去一定数量的年、月或天。返回的对象将具有与此对象相同的可观察类型。

      在某些情况下,更改字段的定义不完全明确。例如,如果目标对象是代表3月31日的日期,则减去一个月将是不明确的。在这种情况下,字段负责解析结果。通常它会选择前一个有效日期,例如在这个例子中是2月的最后一个有效日期。

      指定者:
      minus 在接口 Temporal
      参数:
      amountToSubtract - 要减去的指定单位的数量,可以为负数
      unit - 要减去数量的单位,不能为空
      返回:
      具有指定周期减去的相同类型的对象,不能为空
      抛出:
      DateTimeException - 如果无法减去单位
      ArithmeticException - 如果发生数值溢出
    • query

      default <R> R query(TemporalQuery<R> query)
      使用指定的查询查询此日期时间。

      使用指定的查询策略对象查询此日期时间。 TemporalQuery对象定义要用于获取结果的逻辑。阅读查询的文档以了解此方法的结果将是什么。

      此方法的结果是通过在指定查询上调用TemporalQuery.queryFrom(TemporalAccessor)方法来获取的,传递this作为参数。

      指定者:
      query 在接口 TemporalAccessor中指定
      类型参数:
      R - 结果的类型
      参数:
      query - 要调用的查询,不能为空
      返回:
      查询结果,可能返回null(由查询定义)
      抛出:
      DateTimeException - 如果无法查询(由查询定义)
      ArithmeticException - 如果发生数值溢出(由查询定义)
    • adjustInto

      default Temporal adjustInto(Temporal temporal)
      调整指定的时间对象,使其具有与此对象相同的日期和时间。

      返回一个与输入相同可观察类型的时间对象,日期和时间更改为与此相同。

      该调整等同于两次使用Temporal.with(TemporalField, long),传递ChronoField.EPOCH_DAYChronoField.NANO_OF_DAY作为字段。

      在大多数情况下,通过使用Temporal.with(TemporalAdjuster)来颠倒调用模式更清晰:

         // 这两行是等效的,但推荐第二种方法
         temporal = thisLocalDateTime.adjustInto(temporal);
         temporal = temporal.with(thisLocalDateTime);
       

      此实例是不可变的,不受此方法调用的影响。

      指定者:
      adjustInto 在接口 TemporalAdjuster中指定
      参数:
      temporal - 要调整的目标对象,不能为空
      返回:
      调整后的对象,不能为空
      抛出:
      DateTimeException - 如果无法进行调整
      ArithmeticException - 如果发生数值溢出
    • format

      default String format(DateTimeFormatter formatter)
      使用指定的格式化程序格式化此日期时间。

      将此日期时间传递给格式化程序以生成一个字符串。

      默认实现必须表现如下:

        return formatter.format(this);
       
      参数:
      formatter - 要使用的格式化程序,不能为空
      返回:
      格式化后的日期时间字符串,不能为空
      抛出:
      DateTimeException - 如果在打印过程中发生错误
    • atZone

      ChronoZonedDateTime<D> atZone(ZoneId zone)
      将此时间与时区组合以创建一个ChronoZonedDateTime

      返回一个ChronoZonedDateTime,由此日期时间在指定时区形成。结果将尽可能与此日期时间匹配。时区规则,如夏令时,意味着并非每个本地日期时间对于指定的时区都是有效的,因此本地日期时间可能会被调整。

      本地日期时间将解析为时间线上的单个时刻。这是通过找到由时区ID的规则定义的本地日期时间相对于UTC /格林威治的有效偏移来实现的。

      在大多数情况下,本地日期时间只有一个有效偏移。在重叠的情况下,其中时钟被设置回去,有两个有效偏移。此方法使用通常对应于“夏季”的较早偏移。

      在跳跃的情况下,其中时钟向前跳跃,没有有效偏移。相反,本地日期时间将调整为晚于跳跃长度的时间。对于典型的一小时夏令时更改,本地日期时间将被移动到一个小时后,进入通常对应于“夏季”的偏移。

      要在重叠时获得较晚的偏移,请在此方法的结果上调用ChronoZonedDateTime.withLaterOffsetAtOverlap()

      参数:
      zone - 要使用的时区,不能为空
      返回:
      由此日期时间形成的带时区的日期时间,不能为空
    • toInstant

      default Instant toInstant(ZoneOffset offset)
      将此日期时间转换为Instant

      将此本地日期时间与指定的偏移组合以形成一个Instant

      此默认实现从日期的纪元日和时间的一天中计算。

      参数:
      offset - 用于转换的偏移,不能为空
      返回:
      表示相同时刻的Instant,不能为空
    • toEpochSecond

      default long toEpochSecond(ZoneOffset offset)
      将此日期时间转换为从1970-01-01T00:00:00Z的纪元开始的秒数。

      将此本地日期时间与指定的偏移组合以计算纪元秒值,即从1970-01-01T00:00:00Z开始经过的秒数。纪元后的时间线上的时刻为正,之前为负。

      此默认实现从日期的纪元日和时间的一天中计算。

      参数:
      offset - 用于转换的偏移,不能为空
      返回:
      从1970-01-01T00:00:00Z的纪元开始的秒数
    • compareTo

      default int compareTo(ChronoLocalDateTime<?> other)
      将此日期时间与另一个日期时间进行比较,包括年表。

      比较首先基于基础时间线日期时间,然后基于年表。它是“与equals一致”的,如Comparable定义的。

      例如,以下是比较器顺序:

      1. 2012-12-03T12:00 (ISO)
      2. 2012-12-04T12:00 (ISO)
      3. 2555-12-04T12:00 (ThaiBuddhist)
      4. 2012-12-05T12:00 (ISO)
      值#2和#3代表时间线上的相同日期时间。当两个值代表相同的日期时间时,将比较年表ID以区分它们。这一步是为了使排序“与equals一致”。

      如果所有被比较的日期时间对象都在同一年表中,则不需要额外的年表阶段,只使用本地日期时间。

      此默认实现执行上述定义的比较。

      指定者:
      compareTo 在接口 Comparable<D extends ChronoLocalDate>中指定
      参数:
      other - 要比较的另一个日期时间,不能为空
      返回:
      比较器值,即此本地日期时间与other本地日期时间以及此年表与other年表的比较,按顺序返回第一个非零结果,否则返回零
      参见:
    • isAfter

      default boolean isAfter(ChronoLocalDateTime<?> other)
      检查此日期时间是否在指定日期时间之后,忽略年表。

      此方法与compareTo(java.time.chrono.ChronoLocalDateTime<?>)中的比较不同,因为它仅比较基础日期时间而不比较年表。这允许根据时间线位置比较不同日历系统中的日期。

      此默认实现基于纪元日和一天中的纳秒执行比较。

      参数:
      other - 要比较的另一个日期时间,不能为空
      返回:
      如果此日期时间在指定日期时间之后,则为true
    • isBefore

      default boolean isBefore(ChronoLocalDateTime<?> other)
      检查此日期时间是否在指定日期时间之前,忽略年表。

      此方法与compareTo(java.time.chrono.ChronoLocalDateTime<?>)中的比较不同,因为它仅比较基础日期时间而不比较年表。这允许根据时间线位置比较不同日历系统中的日期。

      此默认实现基于纪元日和一天中的纳秒执行比较。

      参数:
      other - 要比较的另一个日期时间,不能为空
      返回:
      如果此日期时间在指定日期时间之前,则为true
    • isEqual

      default boolean isEqual(ChronoLocalDateTime<?> other)
      检查此日期时间是否等于指定日期时间,忽略年表。

      此方法与compareTo(java.time.chrono.ChronoLocalDateTime<?>)中的比较不同,因为它仅比较基础日期和时间而不比较年表。这允许根据时间线位置比较不同日历系统中的日期。

      此默认实现基于纪元日和一天中的纳秒执行比较。

      参数:
      other - 要比较的另一个日期时间,不能为空
      返回:
      如果基础日期时间等于时间线上的指定日期时间,则为true
    • equals

      boolean equals(Object obj)
      检查此日期时间是否等于另一个日期时间,包括年表。

      将此日期时间与另一个日期时间进行比较,确保日期时间和年表相同。

      覆盖:
      equals 在类 Object
      参数:
      obj - 要检查的对象,null返回false
      返回:
      如果这个对象等于另一个日期,则返回true
      参见:
    • hashCode

      int hashCode()
      这个日期时间的哈希码。
      覆盖:
      hashCode 在类 Object
      返回:
      一个适当的哈希码
      参见:
    • toString

      String toString()
      将此日期时间输出为一个String

      输出将包括完整的本地日期时间。

      覆盖:
      toString 在类 Object
      返回:
      此日期时间的字符串表示,不为null