日期调整期

TemporalAdjusters

TemporalAdjusters类提供了大量用于常见调整的静态方法。你可以将调整方法的结果传递给with方法。

//某个月的第一个星期二
LocalDate firstTuesday = LocalDate.of(year,month,1).with(
    TeporalAdjusters.nextOrSame(DayOfWeek.TUESDAY);
);

TemporalAdjusters类中的日期调整期

方法

描述

next(weekday),previous(weekday)

下一个或上一个给定的星期日期

nextOrSame(weekday),previousOrSame(weekday)

从给定的星期开始的下一个或上一个给定的星期日期

dayOfWeekInMonth(n,weekday)

月份中的第n个wekkday

lastInMonth(weekday)

月份中的最后一个weekday

firstDayOfMonth(),firstDayOfNextMonth(),firstDayOfNextYear(),

lastDayOfMonth(),lastDayOfYear()

方法名所描述的日期

还可以通过实现TemporalAdjuster接口来创建自己的调整期。

//计算下一个工作日
TemporalAdjuster NEXT_WORKDAY = w -> {
  LocalDate result = (LocalDate) w;
  do {
      result = result.plusDays(1);
  }while(result.getDayOfWeek().getValue() >= 6);
  return result;
};
LocalDate backToWork = today.with(NEXT_WORKDAY);

注意,lambda表达式的参数类型为Temporal,它必须被强制转型为LocalDate。你可以用ofDateAdjuster方法来避免转型,该方法期望得到的参数类型为UnaryOperator的lambda表达式。

TemporalAdjuster NEXT_WORKDAY = TemporalAdjusters.ofDateAdjuster( w -> {
    LocalDate result = w;
    do{
        retult = result.plusDays(1);
    }while(result.getDayOfWeek().getValue() >= 6);
    return result;
});

Last updated