模块 java.base

接口 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 中的讨论。

实现要求:
必须小心实现此接口以确保其他类正确运行。所有可以实例化的实现都必须是最终的、不可变的和线程安全的。只要有可能,子类就应该是可序列化的。
自从:
1.8
  • 方法详情

    • 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,则调用 range get with(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 方法将抛出异常。

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

      如果单位不是 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);    // 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 - 如果发生数字溢出
    • 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);        // 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 - 要添加的数量,不为空
      返回:
      进行了指定调整的同一类型的对象,不为空
      抛出:
      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);        // 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 - 要减去的金额,不为空
      返回:
      进行了指定调整的同一类型的对象,不为空
      抛出:
      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_DAY ChronoField.NANO_OF_DAY 作为字段传递。

      在大多数情况下,使用 Temporal.with(TemporalAdjuster) 反转调用模式会更清楚:

        // these two lines are equivalent, but the second approach is recommended
        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 的 rules 定义的本地日期时间找到与 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)
      将此日期时间与另一个日期时间进行比较,包括年表。

      比较首先基于基础时间线日期时间,然后基于年表。正如 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 以区分它们。需要此步骤才能使排序“与等价一致”。

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

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

      指定者:
      compareTo 在接口 Comparable<D extends ChronoLocalDate>
      参数:
      other - 要比较的另一个日期时间,不为空
      返回:
      比较值,小于则为负,大于则为正
    • isAfter

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

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

      此默认实现基于纪元日和纳米日执行比较。

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

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

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

      此默认实现基于纪元日和纳米日执行比较。

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

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

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

      此默认实现基于纪元日和纳米日执行比较。

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

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

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

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

      int hashCode()
      此日期时间的哈希码。
      重写:
      hashCode 在类 Object
      返回:
      合适的哈希码
      参见:
    • toString

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

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

      重写:
      toString 在类 Object
      返回:
      此日期时间的字符串表示形式,不为空