创建自定义 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