原文:http://zetcode.com/java/temporaladjusters/
Java TemporalAdjusters教程展示了如何使用TemporalAdjusters修改 Java 中的Temporal对象。
时间是日期,时间和偏移对象的基本接口类型,包括LocalDate,LocalTime,LocalDateTime和Instant。
Java TemporalAdjusters
TemporalAdjusters用于修改时间对象。 他们允许查找星期,月份或年份的第一天或最后一天; 一周的第二天或下一天,依此类推。
Java TemporalAdjusters示例
以下示例使用内置的TemporalAdjusters方法。
JavaTemporalAdjustersEx.java
package com.zetcode;import java.time.DayOfWeek;import java.time.LocalDate;import java.time.temporal.TemporalAdjusters;public class JavaTemporalAdjustersEx {public static void main(String[] args) {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);}}
该示例介绍了七个时间调节器。
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,我们可以找到该月的最后一个星期日。
today: 2018-12-03first day of month: 2018-12-01last day of month: 2018-12-31next monday: 2018-12-10first day of next month: 2019-01-01last day of year: 2018-12-31first day of year: 2018-01-01last Sunday of month: 2018-12-30
这是输出。
Java 自定义TemporalAdjuster
我们可以创建我们的自定义时间调整器。
JavaCustomTemporalAdjusterEx.java
package com.zetcode;import java.time.LocalDate;import java.time.Period;import java.time.temporal.TemporalAdjuster;public class JavaCustomTemporalAdjusterEx {public static void main(String[] args) {var localDate = LocalDate.of(2018, 12, 3);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()创建日期。 它在日期上增加了 14 天并打印结果。
TemporalAdjuster taj = t -> t.plus(Period.ofDays(14));
这是一个 lambda 表达式,它创建一个TemporalAdjuster,它向创建的日期对象增加 14 天。
var result = localDate.with(taj);
我们得到结果。
Adding 14 days to 2018-12-03 gives 2018-12-17
这是输出。
我们可以通过实现TemporalAdjuster接口来创建时间调整器。
JavaCustomTemporalAdjusterEx2.java
package com.zetcode;import java.time.LocalDate;import java.time.temporal.ChronoField;import java.time.temporal.Temporal;import java.time.temporal.TemporalAdjuster;class NextChristmas implements TemporalAdjuster {@Overridepublic Temporal adjustInto(Temporal temporal) {return temporal.with(ChronoField.MONTH_OF_YEAR, 12).with(ChronoField.DAY_OF_MONTH, 25);}}public class JavaCustomTemporalAdjusterEx2 {public static void main(String[] args) {var now = LocalDate.now();System.out.println("Today: " + now);var xmas = now.with(new NextChristmas());System.out.println("Next XMas: " + xmas);}}
在示例中,自定义TemporalAdjuster计算下一个 XMas 的日期。
@Overridepublic Temporal adjustInto(Temporal temporal) {return temporal.with(ChronoField.MONTH_OF_YEAR, 12).with(ChronoField.DAY_OF_MONTH, 25);}
我们实现了adjustInto()方法,该方法返回 XMa 的Temporal对象,调用该方法的日期应调整为该对象。
Today: 2018-12-03Next XMas: 2018-12-25
这是输出。
在本教程中,我们使用 Java TemporalAdjusters完成了日期和时间的修改。
您可能对以下相关教程感兴趣: Java 文件教程, Java LocalTime教程, Java 教程和 Java Unix 时间教程。
