在前面的示例中,我们LocalDate使用诸如plusMonths()或的方法通过按天,月,年对日期对象的值进行加或减来操纵的值minusDays()。或者使用类似withYear()或的方法更改日期对象的年或月withMonth()。
但是有些时候我们想要操纵日期对象,以便获得月的第一天或月的最后一天。我们要操纵日期值,以将日期提前到当天或当年最后一天之后的第一个星期一。
要以这种方式操作日期对象,我们可以使用with()方法并将TemporalAdjuster对象作为参数传递。幸运的是,日期和时间API已经提供了一些常用的TemporalAdjuster。这些TemporalAdjuster是作为静态工厂方法提供的,我们可以在java.time.temporal.TemporalAdjusters类中找到它们。
以下示例是使用TemporalAdjuster/TemporalAdjusters类操纵日期对象的代码段。
package org.nhooo.example.datetime; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; public class DateManipulationWithTemporalAdjuster { public static void main(String[] args) { LocalDate date = LocalDate.now(); System.out.println("Current date = " + date); LocalDate date1 = date.with(TemporalAdjusters.firstDayOfMonth()); System.out.println("First day of month = " + date1); LocalDate date2 = date.with(TemporalAdjusters.lastDayOfMonth()); System.out.println("Last day of month = " + date2); LocalDate date3 = date.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); System.out.println("Next Monday = " + date3); LocalDate date4 = date.with(TemporalAdjusters.lastDayOfYear()); System.out.println("Last day of year = " + date4); } }
代码段的结果是:
Current date = 2016-03-06 First day of month = 2016-03-01 Last day of month = 2016-03-31 Next Monday = 2016-03-07 Last day of year = 2016-12-31
下表显示了TemporalAdjusters该类提供的静态工厂方法的完整信息。
方法名称 | 方法说明 |
---|---|
dayOfWeekInMonth | 返回与月份中的星期几相同的月份中的新日期。 |
firstDayOfMonth | 返回设置为当前月份第一天的新日期。 |
firstDayOfNextMonth | 返回设置为下个月第一天的新日期。 |
firstDayOfNextYear | 返回设置为明年第一天的新日期。 |
firstDayOfYear | 返回设置为当年第一天的新日期。 |
firstInMonth | 返回与第一个匹配的星期几相同的月份中的新日期。 |
lastDayOfMonth | 返回设置为当月最后一天的新日期。 |
lastDayOfYear | 返回设置为当年最后一天的新日期。 |
lastInMonth | 返回与上一个匹配的星期几相同的月份中的新日期。 |
next | 返回下一个星期几调节器。 |
nextOrSame | 返回下一个或相同的星期几调节器。 |
ofDateAdjuster | 返回用户编写的调节器。 |
previous | 返回上一个星期几调节器。 |
previousOrSame | 返回前一个或相同的星期几调节器。 |