模块 java.base

接口 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)

  // these two lines are equivalent, but the second approach is recommended
  temporal = thisAdjuster.adjustInto(temporal);
  temporal = temporal.with(thisAdjuster);
 
推荐使用第二种方法,with(TemporalAdjuster),代码读起来更清晰。

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

  • 找到一个月的第一天或最后一天
  • 找到下个月的第一天
  • 查找一年中的第一天或最后一天
  • 寻找明年的第一天
  • 查找一个月内的第一天或最后一天,例如“六月的第一个星期三”
  • 查找下一个或前一个星期几,例如“下星期四”
实现要求:
此接口对实现的可变性没有任何限制,但强烈建议使用不变性。
自从:
1.8
参见:
  • 方法总结

    修饰符和类型
    方法
    描述
    adjustInto(Temporal temporal)
    调整指定的时间对象。
  • 方法详情

    • adjustInto

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

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

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

        // these two lines are equivalent, but the second approach is recommended
        temporal = thisAdjuster.adjustInto(temporal);
        temporal = temporal.with(thisAdjuster);
       
      推荐使用第二种方法,with(TemporalAdjuster),代码读起来更清晰。
      实现要求:
      实现必须获取输入对象并对其进行调整。实施定义了调整的逻辑,并负责记录该逻辑。它可以使用 Temporal 上的任何方法来查询时间对象并执行调整。返回的对象必须与输入对象具有相同的可观察类型

      不得更改输入对象。相反,必须退回原件的调整副本。这为不可变和可变时间对象提供了等效的、安全的行为。

      输入的时间对象可以在除 ISO 之外的日历系统中。实现可以选择记录与其他日历系统的兼容性,或者通过 querying the chronology 拒绝非 ISO 时间对象。

      可以从多个线程并行调用此方法。调用时它必须是线程安全的。

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