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

使用 Java 8 TemporalAdjusters 来处理重复日期,例如处理每周报告、发送自动每月报告等。

日期:2020-09-17 00:09:40 来源:oir作者:oir