创建自定义 TemporalAdjuster
创建一个自定义调整器,可用于根据某些业务逻辑调整重复日期。
它可以通过两种方式完成:
- 实现
TemporalAdjuster接口 - 内联 Lambda 表达式
// 带有lambda的定制时间调节器
TemporalAdjuster temporalAdjuster = t -> t.plus(Period.ofDays(7));
// 带有TemporalAdjuster接口的自定义时间调节器
class NextBirthDay implements TemporalAdjuster
{
@Override
public Temporal adjustInto(Temporal temporal)
{
return temporal.with(ChronoField.MONTH_OF_YEAR, 11)
.with(ChronoField.DAY_OF_MONTH, 22);
}
}
欢迎来到之路教程(on itroad-com)
内置调节器
这是默认提供的调整器列表,便于使用。
有关详细信息,请访问官方 Java 文档。
| Adjuster | 描述 |
|---|---|
firstDayOfMonth() | 返回一个新日期,将其设置为当月的第一天。 |
lastDayOfMonth() | 返回一个新日期,将其设置为当月的最后一天。 |
firstDayOfNextMonth() | 返回一个新日期,将其设置为下个月的第一天。 |
firstDayOfYear() | 返回一个新日期,将其设置为当年的第一天。 |
lastDayOfYear() | 返回一个新日期,将其设置为当年的最后一天。 |
firstDayOfNextYear() | 返回一个新日期,将其设置为下一年的第一天。 |
firstInMonth() | 返回与第一个匹配的星期几相同的月份中的新日期。如“五月的第一个星期三”。 |
lastInMonth() | 返回与最后一个匹配的星期几相同月份的新日期。 |
dayOfWeekInMonth() | 返回与顺序星期几相同的月份中的新日期。 |
next() | 将日期返回到调整日期后指定星期几的第一次出现。 |
previous() | 将日期返回到调整日期之前指定的星期几的第一次出现。 |
TemporalAdjuster 接口
TemporalAdjuster接口和 TemporalAdjusters工厂类提供了许多有用的内置调整器来处理重复事件。
其中大多数的名称直接告诉我们它们的作用。
如果提供的调整器没有解决任何特定的业务需求,我们可以构建自己的自定义 TemporalAdjuster 。
然后我们可以使用该日期/时间对象的with()方法应用于任何时间对象。
例如,在一个团队中,每周一总会有一次每周例会。
我们想要获取接下来 5 次会议的日期列表。
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;
public class TemporalAdjusterExamples
{
public static void main(String[] args)
{
LocalDate localDate = LocalDate.of(2020, 5, 9);
List<LocalDate> meetingDates = getWeeklyMeetingDates(localDate, 5);
System.out.println(meetingDates);
}
private static List<LocalDate>
getWeeklyMeetingDates(LocalDate localDate, int count)
{
List<LocalDate> dates = new ArrayList<>();
for(int i = 0; i < count; i++)
{
localDate = localDate
.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
dates.add(localDate);
}
return dates;
}
}
输出:
[2020-05-11, 2020-05-18, 2020-05-25, 2020-06-01, 2020-06-08]
使用 Java 8 TemporalAdjusters 来处理重复日期,例如处理每周报告、发送自动每月报告等。
日期:2020-09-17 00:09:40 来源:oir作者:oir
