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教程。