Java 8 TemporalAdjusters Example
1. Introduction
Java 8 Date-Time API is a JSR-310 implementation. It has a new set of packages to provide a comprehensive date-time model.
- java.time – base package for managing dates and times
- java.time.chrono – handles alternative calendaring and chronology systems
- java.time.format – handles formatting of dates and times
- java.time.temporal – accesses to date and time using fields, units, and adjusters
Java 8 Temporal is an interface which defines read-write access to a temporal object, such as the date, time, offset or a combination of these. Java 8 provides many common implementation classes: LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Instant, JapaneseDate, ThaiBuddhistDate, HijrahDate, MinguoDate, etc.
Java 8 TemporalAdjusters is a class which contains predefined static implementations for many common useful methods to modify temporal objects.
Method Name | Description |
---|---|
firstDayOfMonth | Returns the “first day of month” adjuster, which returns a new date set it to the first day of the current month. |
lastDayOfMonth | Returns the “last day of month” adjuster, which returns a new date set it to the last day of the current month. |
firstDayOfNextMonth | Returns the “first day of next month” adjuster, which returns a new date set it to the first day of the next month. |
firstDayOfYear | Returns the “first day of the year” adjuster, which returns a new date set it to the first day of the current year. |
lastDayOfYear | Returns the “last day of the year” adjuster, which returns a new date set it to the last day of the current year. |
firstDayOfNextYear | Returns the “first day of next year” adjuster, which returns a new date set it to the first day of the next year. |
firstInMonth | Returns the “first day-of-week within a month” adjuster, which returns a new date in the same month with the first matching day-of-week. Such as “first Wednesday in June”. |
lastInMonth | Returns the “last day-of-week within a month adjuster”, such as “last Thursday in November” |
dayOfWeekInMonth | Returns the “day-of-week in month” adjuster, which returns a new date in the same month with the ordinal day-of-week. |
next | Returns the “next day-of-week” adjuster, which adjusts the date to the first occurrence of the specified day-of-week after the date being adjusted. |
previous | Returns the “previous day-of-week” adjuster, which adjusts the date to the first occurrence of the specified day-of-week before the date being adjusted. |
In this example, I will demonstrate how to adjust the date in LocalDate
, LocalDateTime
, ZonedDateTime
, JapaneseDate
, ThaiBuddhistDate
, HijrahDate
, MinguoDate
using TemporalAdjusters
.
2. Technologies used
The example code in this article was built and run using:
- Java 1.8.101
- Maven 3.3.9
- Eclipse Oxygen
- JUnit 4.12
3. Maven Project
3.1 Dependency
Add JUnit to the pom.xml.
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>zheng.jcg.demo</groupId> <artifactId>java8-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
4. Custom TemporalAdjuster
4.1 HolidayAdjuster
If you work on a system which needs to find holidays like Mother’s Day, Father’s Day, Labor Day, or Thanksgiving, you can do so with TemporalAdjusters.dayOfWeekInMonth
in a few lines of codes. In this step, I will create a HolidayAdjuster
class to find a holiday as a LocalDate
.
HolidayAdjuster.java
package com.zheng.demo; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.Month; import java.time.temporal.Temporal; import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAdjusters; public class HolidayAdjuster implements TemporalAdjuster { private static final int FIRST_DAY = 1; public HolidayAdjuster(Month month, int ordinal, DayOfWeek dayOfWeek) { super(); this.month = month; this.dayOfWeek = dayOfWeek; this.ordinal = ordinal; } private Month month; private DayOfWeek dayOfWeek; private int ordinal; @Override public Temporal adjustInto(Temporal temporalAdjusterInput) { LocalDate temporalAdjusterDate = LocalDate.from(temporalAdjusterInput); LocalDate holidayMonth = LocalDate.of(temporalAdjusterDate.getYear(), month, FIRST_DAY); return holidayMonth.with(TemporalAdjusters.dayOfWeekInMonth(ordinal, dayOfWeek)); } }
4.2 HolidayAdjusterTest
In this step, I will create four unit test cases to output the date for Mother’s day, Father’s Day, Labor Day, and Thanksgiving. Please note that the Temporal must be a LocalDate
type.
HolidayAdjusterTest.java
package com.zheng.demo; import java.time.DateTimeException; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.LocalTime; import java.time.Month; import org.junit.Before; import org.junit.Test; public class HolidayAdjusterTest { private LocalDate localDate; @Before public void setup() { localDate = LocalDate.now(); System.out.print("\nCurrent localDate : " + localDate + ". "); } @Test public void mothersDay_customerAdjuster() { HolidayAdjuster mothersDayAdjuster = new HolidayAdjuster(Month.MAY, 2, DayOfWeek.SUNDAY); LocalDate mothersDay = localDate.with(mothersDayAdjuster); System.out.println("Mother's Day : " + mothersDay); } @Test public void fathersDay_customerAdjuster() { HolidayAdjuster fathersDayAdjuster = new HolidayAdjuster(Month.JUNE, 3, DayOfWeek.SUNDAY); LocalDate fathersDay = localDate.with(fathersDayAdjuster); System.out.println("Father's Day : " + fathersDay); } @Test public void laborDay_customerAdjuster() { HolidayAdjuster laborDayAdjuster = new HolidayAdjuster(Month.SEPTEMBER, 1, DayOfWeek.MONDAY); LocalDate laborDay = localDate.with(laborDayAdjuster); System.out.println("Labor Day : " + laborDay); } @Test public void thanksGivingDate_customAdjuster() { HolidayAdjuster thanksgivingAdjuster = new HolidayAdjuster(Month.NOVEMBER, 4, DayOfWeek.THURSDAY); LocalDate thanksGivingDay = localDate.with(thanksgivingAdjuster); System.out.println("Thanksgiving Date: " + thanksGivingDay); } @Test(expected=DateTimeException.class) public void exception_wrongtype() { LocalTime test = LocalTime.now(); System.out.println("Throw Exception if not LocalDate."); test.with(new HolidayAdjuster(Month.NOVEMBER, 4, DayOfWeek.THURSDAY)); } }
Execute HolidayAdjusterTest
as Junit test and capture the output here.
Junit Output
Current localDate : 2018-11-28. Labor Day : 2018-09-03 Current localDate : 2018-11-28. Father's Day : 2018-06-17 Current localDate : 2018-11-28. Thanksgiving Date: 2018-11-22 Current localDate : 2018-11-28. Throw Exception if not LocalDate. Current localDate : 2018-11-28. Mother's Day : 2018-05-13
4.3 PaydayAdjuster
Company A schedules to cut the paycheck at 10 AM twice a month, one is on the 15th day of every month, the other is on the last day of every month. If it is on a Saturday or Sunday, then it is set to Friday. In this step, I will create a PayDayAdjuster
class to find the next payday as a LocalDateTime
with the previous
and lastDayOfMonth
methods.
PaydayAdjuster.java
package com.zheng.demo; import java.time.DayOfWeek; import java.time.LocalDateTime; import java.time.temporal.Temporal; import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAdjusters; public class PaydayAdjuster implements TemporalAdjuster { private static final int TEN_OCLOCK = 10; private static final int MID_MONTH_DAY = 15; public PaydayAdjuster() { super(); } @Override public Temporal adjustInto(Temporal temporalAdjusterInput) { LocalDateTime orgDate = LocalDateTime.from(temporalAdjusterInput); LocalDateTime date = LocalDateTime.of(orgDate.getYear(), orgDate.getMonth(), orgDate.getDayOfMonth(), TEN_OCLOCK, 0); int day; if (date.getDayOfMonth() < MID_MONTH_DAY) { day = MID_MONTH_DAY; } else { day = date.with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth(); } date = date.withDayOfMonth(day); if (date.getDayOfWeek() == DayOfWeek.SATURDAY || date.getDayOfWeek() == DayOfWeek.SUNDAY) { date = date.with(TemporalAdjusters.previous(DayOfWeek.FRIDAY)); } return temporalAdjusterInput.with(date); } }
4.4 PaydayAdjusterTest
In this step, I will create unit test cases to output the next payday. Please note that Temporal must be a LocalDateTime
type.
PaydayAdjusterTest.java
package com.zheng.demo; import java.time.DateTimeException; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.Month; import java.time.temporal.TemporalAdjusters; import org.junit.Before; import org.junit.Test; public class PaydayAdjusterTest { private LocalDateTime localDate; @Before public void setup() { localDate = LocalDateTime.now(); System.out.print("\nCurrent LocalDateTime : " + localDate + ". "); } @Test public void nextPayDay() { LocalDateTime payDate = localDate.with(new PaydayAdjuster()); System.out.println("Next Pay Day : " + payDate); } @Test public void nextMonthPayDay() { LocalDateTime firstMonth = localDate.with(TemporalAdjusters.firstDayOfNextMonth()); LocalDateTime payDate = firstMonth.with(new PaydayAdjuster()); System.out.println("Next Month Pay Day : " + payDate); } @Test(expected = DateTimeException.class) public void exception_wrongtype() { LocalDate test = LocalDate.now(); System.out.println("Throw Exception if not LocalDateTime."); test.with(new HolidayAdjuster(Month.NOVEMBER, 4, DayOfWeek.THURSDAY)); } }
Execute it as Junit test and capture the output.
PaydayAdjusterTest Output
Current LocalDateTime : 2018-11-28T08:55:55.887. Next Month Pay Day : 2018-12-14T10:00 Current LocalDateTime : 2018-11-28T08:55:55.950. Next Pay Day : 2018-11-30T10:00 Current LocalDateTime : 2018-11-28T08:55:55.950. Throw Exception if not LocalDateTime.
5. JUnit Tests
Java 8 TemporalAdjusters provides lots of out-of-box solutions for adjusting the date. In this step, I will create JUnit tests to demonstrate how to use these pre-defined static methods to modify temporal objects.
5.1 TemporalAdjusters_LocalDateTest
Java 8 LocalDate
represents a date without a time zone or time. In this step, I will adjust the year, month, and day with the pre-defined methods: firstDayOfYear
, firstDayOfMonth
, etc.
TemporalAdjusters_LocalDateTest.java
package com.zheng.demo; import static org.junit.Assert.assertEquals; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.temporal.ChronoField; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAdjusters; import org.junit.Before; import org.junit.Test; public class TemporalAdjusters_LocalDateTest { private LocalDate localDate; @Before public void setup() { localDate = LocalDate.now(); System.out.println("\nCurrent localDate : " + localDate); } @Test public void adjuster_firstDayOfMonth() { LocalDate updatedDate = localDate.with(TemporalAdjusters.firstDayOfMonth()); System.out.println("firstDayOfMonth : " + updatedDate); } @Test public void adjuster_firstDayOfYear() { LocalDate updatedDate = localDate.with(TemporalAdjusters.firstDayOfYear()); System.out.println("firstDayOfYear : " + updatedDate); } @Test public void adjuster_lastDayOfYear() { LocalDate updatedDate = localDate.with(TemporalAdjusters.lastDayOfYear()); System.out.println("lastDayOfYear : " + updatedDate); } @Test public void adjuster_firstDayOfNextYear() { LocalDate updatedDate = localDate.with(TemporalAdjusters.firstDayOfNextYear()); System.out.println("firstDayOfNextYear : " + updatedDate); } @Test public void adjuster_firstDayOfNextMonth() { LocalDate updatedDate = localDate.with(TemporalAdjusters.firstDayOfNextMonth()); System.out.println("firstDayOfNextMonth : " + updatedDate); } @Test public void adjuster_lastDayOfMonth() { LocalDate updatedDate = localDate.with(TemporalAdjusters.lastDayOfMonth()); System.out.println("lastDayOfMonth : " + updatedDate); } @Test public void adjuster_nextMonday() { LocalDate updatedDate = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); System.out.println("nextMonday : " + updatedDate); } @Test public void adjuster_nextSunday() { LocalDate localDate = LocalDate.of(2018, 11, 10); LocalDate nextSunday = localDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); assertEquals("2018-11-11", nextSunday.toString()); } @Test public void adjuster_firstInMonth() { LocalDate updatedDate = localDate.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); System.out.println("firstInMonth_Monday: " + updatedDate); } @Test public void adjuster_previousWednesday() { LocalDate updatedDate = localDate.with(TemporalAdjusters.previous(DayOfWeek.WEDNESDAY)); System.out.println("previousWednesday : " + updatedDate); } @Test public void christmasDay_customAdjuster() { TemporalAdjuster xmas = temporal -> temporal.with(ChronoField.MONTH_OF_YEAR, 12).with(ChronoField.DAY_OF_MONTH, 25); LocalDate xmasDate = localDate.with(xmas); System.out.println("Christmas : " + xmasDate + ", it's on " + xmasDate.getDayOfWeek()); } @Test public void tenDaysLater() { TemporalAdjuster tenDaysFromNow = temporal -> temporal.plus(10, ChronoUnit.DAYS); LocalDate localTimeUpdate = localDate.with(tenDaysFromNow); System.out.println("Ten Days later : " + localTimeUpdate); } }
5.2 TemporalAdjusters_LocalDateTimeTest
Java 8 LocalDateTime
represents a date without a time zone. I will repeat the same adjustment for the LocalDateTime
type.
TemporalAdjusters_LocalDateTimeTest.java
package com.zheng.demo; import java.time.DayOfWeek; import java.time.Duration; import java.time.LocalDateTime; import java.time.temporal.ChronoField; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAdjusters; import org.junit.Before; import org.junit.Test; public class TemporalAdjusters_LocalDateTimeTest { private LocalDateTime localDateTime; @Before public void setup() { localDateTime = LocalDateTime.now(); System.out.println("\nCurrent LocalDateTime : " + localDateTime); } @Test public void adjuster_firstDayOfMonth() { LocalDateTime updatedDate = localDateTime.with(TemporalAdjusters.firstDayOfMonth()); System.out.println("firstDayOfMonth : " + updatedDate); } @Test public void adjuster_firstDayOfNextMonth() { LocalDateTime updatedDate = localDateTime.with(TemporalAdjusters.firstDayOfNextMonth()); System.out.println("firstDayOfNextMonth : " + updatedDate); } @Test public void adjuster_lastDayOfMonth() { LocalDateTime updatedDate = localDateTime.with(TemporalAdjusters.lastDayOfMonth()); System.out.println("lastDayOfMonth : " + updatedDate); } @Test public void adjuster_nextMonday() { LocalDateTime updatedDate = localDateTime.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); System.out.println("Next Monday : " + updatedDate); } @Test public void adjuster_previousWednesday() { LocalDateTime updatedDate = localDateTime.with(TemporalAdjusters.previous(DayOfWeek.WEDNESDAY)); System.out.println("Previous Wednesday : " + updatedDate); } @Test public void christmasDay() { TemporalAdjuster xmas = temporal -> temporal.with(ChronoField.MONTH_OF_YEAR, 12).with(ChronoField.DAY_OF_MONTH, 25); LocalDateTime xmasDate = localDateTime.with(xmas); System.out.println("Christmas : " + xmasDate + ", it's on " + xmasDate.getDayOfWeek()); } @Test public void tenDaysThreeHourLater() { TemporalAdjuster tenDaysThreeHoursFromNow = temporal -> temporal.plus(10, ChronoUnit.DAYS) .plus(Duration.ofHours(3)); LocalDateTime localTimeUpdate = localDateTime.with(tenDaysThreeHoursFromNow); System.out.println("Ten Days later : " + localTimeUpdate); } }
5.3 TemporalAdjusters_ZonedDateTimeTest
Java 8 ZonedDateTime
represents a date with a time zone. In this step, I will repeat the same adjustment for the ZonedDateTime
class.
TemporalAdjusters_ZonedDateTimeTest.java
package com.zheng.demo; import java.time.DayOfWeek; import java.time.ZonedDateTime; import java.time.temporal.ChronoField; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAdjusters; import org.junit.Before; import org.junit.Test; public class TemporalAdjusters_ZonedDateTimeTest { private ZonedDateTime zonedDateTime; @Before public void setup() { zonedDateTime = ZonedDateTime.now(); System.out.println("\nCurrent ZonedDateTime : " + zonedDateTime); } @Test public void adjuster_firstDayOfMonth() { ZonedDateTime updatedDate = zonedDateTime.with(TemporalAdjusters.firstDayOfMonth()); System.out.println("firstDayOfMonth : " + updatedDate); } @Test public void adjuster_firstDayOfYear() { ZonedDateTime updatedDate = zonedDateTime.with(TemporalAdjusters.firstDayOfYear()); System.out.println("firstDayOfYear : " + updatedDate); } @Test public void adjuster_lastDayOfYear() { ZonedDateTime updatedDate = zonedDateTime.with(TemporalAdjusters.lastDayOfYear()); System.out.println("lastDayOfYear : " + updatedDate); } @Test public void adjuster_firstDayOfNextYear() { ZonedDateTime updatedDate = zonedDateTime.with(TemporalAdjusters.firstDayOfNextYear()); System.out.println("firstDayOfNextYear : " + updatedDate); } @Test public void adjuster_firstDayOfNextMonth() { ZonedDateTime updatedDate = zonedDateTime.with(TemporalAdjusters.firstDayOfNextMonth()); System.out.println("firstDayOfNextMonth : " + updatedDate); } @Test public void adjuster_lastDayOfMonth() { ZonedDateTime updatedDate = zonedDateTime.with(TemporalAdjusters.lastDayOfMonth()); System.out.println("lastDayOfMonth : " + updatedDate); } @Test public void adjuster_nextMonday() { ZonedDateTime updatedDate = zonedDateTime.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); System.out.println("nextMonday : " + updatedDate); } @Test public void adjuster_firstInMonth() { ZonedDateTime updatedDate = zonedDateTime.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); System.out.println("firstInMonth_Monday: " + updatedDate); } @Test public void adjuster_previousWednesday() { ZonedDateTime updatedDate = zonedDateTime.with(TemporalAdjusters.previous(DayOfWeek.WEDNESDAY)); System.out.println("previousWednesday : " + updatedDate); } @Test public void christmasDay() { TemporalAdjuster xmas = temporal -> temporal.with(ChronoField.MONTH_OF_YEAR, 12).with(ChronoField.DAY_OF_MONTH, 25); ZonedDateTime xmasDate = zonedDateTime.with(xmas); System.out.println("Christmas : " + xmasDate + ", it's on " + xmasDate.getDayOfWeek()); } @Test public void tenDaysLater() { TemporalAdjuster tenDaysFromNow = temporal -> temporal.plus(10, ChronoUnit.DAYS); ZonedDateTime localTimeUpdate = zonedDateTime.with(tenDaysFromNow); System.out.println("Ten Days later : " + localTimeUpdate); } }
5.4 TemporalAdjusters_MinguoDateTest
Java 8 MinGuoDate
represents a date in the Minguo calendar system. It is primarily used in the Republic of China, often known as Taiwan. I will repeat the same adjustment for the MinGuoDate
class.
TemporalAdjusters_MinguoDateTest.java
package com.zheng.demo; import java.time.DayOfWeek; import java.time.chrono.MinguoDate; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAdjusters; import org.junit.Before; import org.junit.Test; public class TemporalAdjusters_MinguoDateTest { private MinguoDate minguoDate; @Before public void setup() { minguoDate = MinguoDate.now(); System.out.println("\nCurrent MinguoDate : " + minguoDate); } @Test public void adjuster_firstDayOfMonth() { MinguoDate updatedDate = minguoDate.with(TemporalAdjusters.firstDayOfMonth()); System.out.println("firstDayOfMonth : " + updatedDate); } @Test public void adjuster_firstDayOfYear() { MinguoDate updatedDate = minguoDate.with(TemporalAdjusters.firstDayOfYear()); System.out.println("firstDayOfYear : " + updatedDate); } @Test public void adjuster_lastDayOfYear() { MinguoDate updatedDate = minguoDate.with(TemporalAdjusters.lastDayOfYear()); System.out.println("lastDayOfYear : " + updatedDate); } @Test public void adjuster_firstDayOfNextYear() { MinguoDate updatedDate = minguoDate.with(TemporalAdjusters.firstDayOfNextYear()); System.out.println("firstDayOfNextYear : " + updatedDate); } @Test public void adjuster_firstDayOfNextMonth() { MinguoDate updatedDate = minguoDate.with(TemporalAdjusters.firstDayOfNextMonth()); System.out.println("firstDayOfNextMonth : " + updatedDate); } @Test public void adjuster_lastDayOfMonth() { MinguoDate updatedDate = minguoDate.with(TemporalAdjusters.lastDayOfMonth()); System.out.println("lastDayOfMonth : " + updatedDate); } @Test public void adjuster_nextMonday() { MinguoDate updatedDate = minguoDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); System.out.println("nextMonday : " + updatedDate); } @Test public void adjuster_firstInMonth() { MinguoDate updatedDate = minguoDate.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); System.out.println("firstInMonth_Monday: " + updatedDate); } @Test public void adjuster_previousWednesday() { MinguoDate updatedDate = minguoDate.with(TemporalAdjusters.previous(DayOfWeek.WEDNESDAY)); System.out.println("previousWednesday : " + updatedDate); } @Test public void tenDaysLater() { TemporalAdjuster tenDaysFromNow = temporal -> temporal.plus(10, ChronoUnit.DAYS); MinguoDate localTimeUpdate = minguoDate.with(tenDaysFromNow); System.out.println("Ten Days later : " + localTimeUpdate); } }
5.5 TemporalAdjusters_JapaneseDateTest
Java 8 JapaneseDate
represents a date in the Japanese Imperial calendar system. I will repeat the same adjustment for the JapaneseDate
class.
TemporalAdjusters_JapaneseDateTest.java
package com.zheng.demo; import java.time.DayOfWeek; import java.time.chrono.JapaneseDate; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAdjusters; import org.junit.Before; import org.junit.Test; public class TemporalAdjusters_JapaneseDateTest { private JapaneseDate japaneseDate; @Before public void setup() { japaneseDate = JapaneseDate.now(); System.out.println("\nCurrent JapaneseDate : " + japaneseDate); } @Test public void adjuster_firstDayOfMonth() { JapaneseDate updatedDate = japaneseDate.with(TemporalAdjusters.firstDayOfMonth()); System.out.println("firstDayOfMonth : " + updatedDate); } @Test public void adjuster_firstDayOfYear() { JapaneseDate updatedDate = japaneseDate.with(TemporalAdjusters.firstDayOfYear()); System.out.println("firstDayOfYear : " + updatedDate); } @Test public void adjuster_lastDayOfYear() { JapaneseDate updatedDate = japaneseDate.with(TemporalAdjusters.lastDayOfYear()); System.out.println("lastDayOfYear : " + updatedDate); } @Test public void adjuster_firstDayOfNextYear() { JapaneseDate updatedDate = japaneseDate.with(TemporalAdjusters.firstDayOfNextYear()); System.out.println("firstDayOfNextYear : " + updatedDate); } @Test public void adjuster_firstDayOfNextMonth() { JapaneseDate updatedDate = japaneseDate.with(TemporalAdjusters.firstDayOfNextMonth()); System.out.println("firstDayOfNextMonth : " + updatedDate); } @Test public void adjuster_lastDayOfMonth() { JapaneseDate updatedDate = japaneseDate.with(TemporalAdjusters.lastDayOfMonth()); System.out.println("lastDayOfMonth : " + updatedDate); } @Test public void adjuster_nextMonday() { JapaneseDate updatedDate = japaneseDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); System.out.println("nextMonday : " + updatedDate); } @Test public void adjuster_firstInMonth() { JapaneseDate updatedDate = japaneseDate.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); System.out.println("firstInMonth_Monday: " + updatedDate); } @Test public void adjuster_previousWednesday() { JapaneseDate updatedDate = japaneseDate.with(TemporalAdjusters.previous(DayOfWeek.WEDNESDAY)); System.out.println("previousWednesday : " + updatedDate); } @Test public void tenDaysLater() { TemporalAdjuster tenDaysFromNow = temporal -> temporal.plus(10, ChronoUnit.DAYS); JapaneseDate localTimeUpdate = japaneseDate.with(tenDaysFromNow); System.out.println("Ten Days later : " + localTimeUpdate); } }
6. Summary
In this example, we reviewed Java 8 Date time API and demonstrated how to use the pre-defined static methods in TemporalAdjusters
to adjust the date at LocalDate
, LocalDateTime
, JapaneseDate
, MinguoDate
, and ZonedDateTime
.
7. Download the Source Code
This example consists of a Maven project which adjusts LocalDate
, LocatDateTime
, JapaneseDate
, MinguoDate
, and ZonedDateTime
using Java 8 TemporalAdjusters
.
You can download the full source code of this example here: Java 8 TemporalAdjusters Example