Java TemporalAdjusters
最后修改日期:2024 年 7 月 10 日
在本文中,我们将展示如何在 Java 中使用 TemporalAdjusters 修改 Temporal 对象。
Temporal 是日期、时间和偏移量对象的基础接口类型,包括 LocalDate、LocalTime、LocalDateTime 和 Instant。
TemporalAdjusters 用于修改 temporal 对象。 它们允许查找一周、一个月或一年的第一天或最后一天; 下一个或上一个工作日等等。
TemporalAdjusters 示例
以下示例使用内置的 TemporalAdjusters 方法。
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
void main() {
var localDate = LocalDate.now();
System.out.printf("today: %s%n", localDate);
var date1 = localDate.with(TemporalAdjusters.firstDayOfMonth());
System.out.printf("first day of month: %s%n", date1);
var date2 = localDate.with(TemporalAdjusters.lastDayOfMonth());
System.out.printf("last day of month: %s%n", date2);
var date3 = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
System.out.printf("next Monday: %s%n", date3);
var date4 = localDate.with(TemporalAdjusters.firstDayOfNextMonth());
System.out.printf("first day of next month: %s%n", date4);
var date5 = localDate.with(TemporalAdjusters.lastDayOfYear());
System.out.printf("last day of year: %s%n", date5);
var date6 = localDate.with(TemporalAdjusters.firstDayOfYear());
System.out.printf("first day of year: %s%n", date6);
var date7 = localDate.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY));
System.out.printf("last Sunday of month: %s%n", date7);
}
该示例展示了七个 temporal adjusters。
var localDate = LocalDate.now();
我们使用 LocalDate.now 计算当前本地日期。
var date1 = localDate.with(TemporalAdjusters.firstDayOfMonth());
使用 firstDayOfMonth 我们找到该月的第一天。
var date2 = localDate.with(TemporalAdjusters.lastDayOfMonth());
使用 lastDayOfMonth 我们找到该月的最后一天。
var date3 = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
使用 next 和 DayOfWeek.MONDAY 我们找到下个星期一。
var date4 = localDate.with(TemporalAdjusters.firstDayOfNextMonth());
使用 firstDayOfNextMonth 我们找到下个月的第一天。
var date5 = localDate.with(TemporalAdjusters.lastDayOfYear());
使用 lastDayOfYear 我们找到今年的最后一天。
var date6 = localDate.with(TemporalAdjusters.firstDayOfYear());
使用 firstDayOfYear 我们找到今年的第一天。
var date7 = localDate.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY));
使用 lastInMonth 和 DayOfWeek.SUNDAY 我们找到该月的最后一个星期日。
$ java Main.java today: 2024-07-10 first day of month: 2024-07-01 last day of month: 2024-07-31 next Monday: 2024-07-15 first day of next month: 2024-08-01 last day of year: 2024-12-31 first day of year: 2024-01-01 last Sunday of month: 2024-07-28
自定义 TemporalAdjuster
我们可以创建自定义的 temporal adjusters。
import java.time.LocalDate;
import java.time.Period;
import java.time.temporal.TemporalAdjuster;
void main() {
var localDate = LocalDate.of(2024, 7, 10);
TemporalAdjuster taj = t -> t.plus(Period.ofDays(14));
var result = localDate.with(taj);
System.out.printf("Adding 14 days to %s gives %s",
localDate, result);
}
该示例使用 LocalDate.of 创建一个日期。 它将日期加上十四天并打印结果。
TemporalAdjuster taj = t -> t.plus(Period.ofDays(14));
这是一个 lambda 表达式,它创建了一个 TemporalAdjuster,该表达式将创建的日期对象加上十四天。
var result = localDate.with(taj);
我们得到结果。
$ java Main.java Adding 14 days to 2024-07-10 gives 2024-07-24
我们可以通过实现 TemporalAdjuster 接口来创建一个 temporal adjuster。
import java.time.LocalDate;
import java.time.temporal.ChronoField;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAdjuster;
class NextChristmas implements TemporalAdjuster {
@Override
public Temporal adjustInto(Temporal temporal) {
return temporal.with(ChronoField.MONTH_OF_YEAR, 12)
.with(ChronoField.DAY_OF_MONTH, 25);
}
}
void main() {
var now = LocalDate.now();
System.out.println("Today: " + now);
var xmas = now.with(new NextChristmas());
System.out.println("Next XMas: " + xmas);
}
在该示例中,自定义的 TemporalAdjuster 计算下一个圣诞节的日期。
@Override
public Temporal adjustInto(Temporal temporal) {
return temporal.with(ChronoField.MONTH_OF_YEAR, 12)
.with(ChronoField.DAY_OF_MONTH, 25);
}
我们实现了 adjustInto 方法,该方法返回圣诞节的 Temporal 对象,调用该方法的日期应调整到该圣诞节。
$ java Main.java Today: 2024-07-10 Next XMas: 2024-12-25
来源
在本文中,我们使用 Java TemporalAdjusters 完成了日期和时间的修改。
作者
列出所有Java教程。