In Java 8, you can use the predefined java.time.temporal.TemporalAdjusters
to adjust a date or Temporal
1. TemporalAdjusters
Example to move a date to firstDayOfMonth, firstDayOfNextMonth, next Monday and etc.
TestDate.java
package com.favtuts.time; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; public class TemporalAdjustersExamples { public static void main(String[] args) { demoTemporalAdjusters(); } static void demoTemporalAdjusters() { LocalDate localDate = LocalDate.now(); System.out.println("current date : " + localDate); LocalDate with = localDate.with(TemporalAdjusters.firstDayOfMonth()); System.out.println("firstDayOfMonth : " + with); LocalDate with1 = localDate.with(TemporalAdjusters.lastDayOfMonth()); System.out.println("lastDayOfMonth : " + with1); LocalDate with2 = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); System.out.println("next monday : " + with2); LocalDate with3 = localDate.with(TemporalAdjusters.firstDayOfNextMonth()); System.out.println("firstDayOfNextMonth : " + with3); } }
Output
current date : 2022-06-05
firstDayOfMonth : 2022-06-01
lastDayOfMonth : 2022-06-30
next monday : 2022-06-06
firstDayOfNextMonth : 2022-07-01
Note
Please check this official TemporalAdjusters JavaDoc for the entire list of the predefined TemporalAdjusters.
2. Custom TemporalAdjuster
Example to implement TemporalAdjuster
to move a date to next Christmas.
NextChristmas.java
package com.favtuts.time; import java.time.temporal.ChronoField; import java.time.temporal.Temporal; import java.time.temporal.TemporalAdjuster; public class NextChristmasAdjuster implements TemporalAdjuster { @Override public Temporal adjustInto(Temporal temporal) { return temporal.with(ChronoField.MONTH_OF_YEAR, 12).with(ChronoField.DAY_OF_MONTH, 25); } }
TestDate.java
package com.favtuts.time; import java.time.LocalDate; public class TemporalAdjustersExamples { public static void main(String[] args) { demoCustomTemporalAdjuster(); } static void demoCustomTemporalAdjuster() { LocalDate localDate = LocalDate.now(); System.out.println("current date : " + localDate); localDate = localDate.with(new NextChristmasAdjuster()); System.out.println("Next Christmas : " + localDate); } }
Output
current date : 2022-06-05
Next Christmas : 2022-12-25
Alternatively, you can use the following lambda expression :
localDate = localDate.with(
temporal -> temporal.with(ChronoField.MONTH_OF_YEAR, 12).with(ChronoField.DAY_OF_MONTH, 25)
);
Download Source Code
$ git clone https://github.com/favtuts/java-core-tutorials-examples
$ cd java-basic/time