Module java.base

Interface TemporalAdjuster

所有已知的子接口:
ChronoLocalDate, ChronoLocalDateTime<D>, Era
所有已知的实现类:
DayOfWeek, HijrahDate, HijrahEra, Instant, IsoEra, JapaneseDate, JapaneseEra, LocalDate, LocalDateTime, LocalTime, MinguoDate, MinguoEra, Month, MonthDay, OffsetDateTime, OffsetTime, ThaiBuddhistDate, ThaiBuddhistEra, Year, YearMonth, ZoneOffset
功能接口:
这是一个功能接口,因此可以用作lambda表达式或方法引用的赋值目标。

@FunctionalInterface public interface TemporalAdjuster
调整时间对象的策略。

调整器是修改时间对象的关键工具。它们存在是为了外部化调整过程,允许不同的方法,如策略设计模式。例如,可能是一个设置日期避开周末的调整器,或者一个将日期设置为月底的调整器。

有两种等效的使用TemporalAdjuster的方法。第一种是直接在此接口上调用方法。第二种是使用Temporal.with(TemporalAdjuster)

   // 这两行是等效的,但第二种方法更推荐
   temporal = thisAdjuster.adjustInto(temporal);
   temporal = temporal.with(thisAdjuster);
 
推荐使用第二种方法with(TemporalAdjuster),因为在代码中更清晰易读。

TemporalAdjusters类包含一组标准的调整器,可作为静态方法使用。这些包括:

  • 找到月份的第一天或最后一天
  • 找到下个月的第一天
  • 找到年份的第一天或最后一天
  • 找到下一年的第一天
  • 找到月份内的某一周的第一天或最后一天,例如“六月的第一个星期三”
  • 找到下一个或上一个星期几,例如“下个星期四”
实现要求:
此接口对实现的可变性没有限制,但强烈建议使用不可变性。
自 JDK 版本:
1.8
参见:
  • Method Summary

    Modifier and Type
    Method
    Description
    adjustInto(Temporal temporal)
    调整指定的时间对象。
  • Method Details

    • adjustInto

      Temporal adjustInto(Temporal temporal)
      调整指定的时间对象。

      使用实现类中封装的逻辑调整指定的时间对象。例如,可能是一个设置日期避开周末的调整器,或者一个将日期设置为月底的调整器。

      有两种等效的使用此方法的方式。第一种是直接调用此方法。第二种是使用Temporal.with(TemporalAdjuster)

         // 这两行是等效的,但第二种方法更推荐
         temporal = thisAdjuster.adjustInto(temporal);
         temporal = temporal.with(thisAdjuster);
       
      推荐使用第二种方法with(TemporalAdjuster),因为在代码中更清晰易读。
      实现要求:
      实现必须接受输入对象并进行调整。实现定义了调整的逻辑,并负责记录该逻辑。它可以使用Temporal上的任何方法来查询时间对象并执行调整。返回的对象必须具有与输入对象相同的可观察类型

      输入对象不得被更改。而是必须返回原始对象的调整副本。这为不可变和可变时间对象提供了等效的安全行为。

      输入时间对象可能在 ISO 之外的日历系统中。实现可以选择记录与其他日历系统的兼容性,或通过查询年表拒绝非 ISO 时间对象。

      此方法可能会被多个线程并行调用。在调用时必须是线程安全的。

      参数:
      temporal - 要调整的时间对象,不能为空
      返回:
      进行调整后具有相同可观察类型的对象,不能为空
      抛出:
      DateTimeException - 如果无法进行调整
      ArithmeticException - 如果发生数值溢出