Java 8 – TemporalAdjusters examples


A quick guide to Java 8 TemporalAdjusters with Example program and Custom Implementation to define our own TemporalAdjuster logic.

1. Overview

In this tutorial, We'll learn about the new Java 8 TemporalAdjusters class and its methods along with examples.

This is part of the new java 8 date and time api and in java.time.temporal package and class name TemporalAdjusters. This class now has predefined temporal objects to change the data as we want.

TemporalAdjusters class is a collection of TemporalAdjuster implementations.

First We will see the example programs on TemporalAdjusters class and next take a look at the Temporal interface.

At last, We'll define custom TemporalAdjuster implementation.

Java 8 – TemporalAdjusters examples

2. TemporalAdjusters Methods

All methods of TemporalAdjusters class are a standard set of adjusters and declared as static. So all of them directly called with a class name such as TemporalAdjusters.firstDayOfMonth().

firstDayOfMonth(): finding the first or last day of the month
firstDayOfNextMonth() : finding the first day of next month
firstDayOfYear(): finding the first  day of the year
lastDayOfYear(): finding the last day of the year
firstDayOfNextYear(): finding the first day of next year
dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek): finding the first or last day-of-week within a month, such as "first Wednesday in June"
next(DayOfWeek dayOfWeek): finding the next day-of-week, such as "next Thursday"
previous(DayOfWeek dayOfWeek): finding the previous day-of-week, such as "previous Thursday"
previousOrSame(DayOfWeek dayOfWeek): Returns the previous-or-same day-of-week
nextOrSame(DayOfWeek dayOfWeek): Returns the next-or-same day-of-week

3. TemporalAdjusters Examples

Java 8 example program on TemporalAdjusters to get firstDayOfMonth, firstDayOfNextMonth, firstDayOfNextYear, firstDayOfYear, lastDayOfYear, dayOfWeekInMonth, lastDayOfMonth and lastDayOfYear.

package com.java.w3schools.blog.java8.date.time.api;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

 * @author Venkatesh
public class TemporalAdjustersExample {

      public static void main(String[] args) {
           LocalDate now = LocalDate.now();
           System.out.println("Current date : " + now);
           LocalDate output = null; 
           output = now.with(TemporalAdjusters.firstDayOfMonth());
           System.out.println("firstDayOfMonth :: " + output);
           output = now.with(TemporalAdjusters.firstDayOfNextMonth());
           System.out.println("firstDayOfNextMonth :: " + output);
           output = now.with(TemporalAdjusters.firstDayOfNextYear());
           System.out.println("firstDayOfNextYear :: " + output);
           output = now.with(TemporalAdjusters.firstDayOfYear());
           System.out.println("firstDayOfYear :: " + output);
           output = now.with(TemporalAdjusters.lastDayOfYear());
           System.out.println("lastDayOfYear :: " + output);
           output = now.with(TemporalAdjusters.dayOfWeekInMonth(1, DayOfWeek.FRIDAY));
           System.out.println("dayOfWeekInMonth(1, DayOfWeek.FRIDAY) :: " + output);
           output = now.with(TemporalAdjusters.lastDayOfMonth());
           System.out.println("lastDayOfMonth :: " + output);
           output = now.with(TemporalAdjusters.lastDayOfYear());
           System.out.println("lastDayOfYear :: " + output);


Current date : 2019-08-06
firstDayOfMonth :: 2019-08-01
firstDayOfNextMonth :: 2019-09-01
firstDayOfNextYear :: 2020-01-01
firstDayOfYear :: 2019-01-01
lastDayOfYear :: 2019-12-31
dayOfWeekInMonth(1, DayOfWeek.FRIDAY) :: 2019-08-02
lastDayOfMonth :: 2019-08-31
lastDayOfYear :: 2019-12-31

4. Temporal

Temporal is a root interface in java 8 date time api. All date and time classes are implementations of Temporal interface.

Many common methods are placed in this interface as default methods.

default Temporal minus(long amountToSubtract, TemporalUnit unit)
default Temporal minus(TemporalAmount amount)
default Temporal plus(TemporalAmount amount)
default Temporal with(TemporalAdjuster adjuster)

The following are the implementation classes of Temporal.


Note: As well as, all the above classes implements TemporalAdjuster Functional Interface which has only one method. The functional method is adjustInto(Temporal temporal) and takes Temporal as an argument.

Whenever a method is called from TemporalAdjusters class, all methods return TemporalAdjuster object. Let us have a look at its internal code for a few methods.

 public static TemporalAdjuster lastDayOfYear() {
        return (temporal) -> temporal.with(DAY_OF_YEAR, temporal.range(DAY_OF_YEAR).getMaximum());

 public static TemporalAdjuster firstDayOfNextYear() {
        return (temporal) -> temporal.with(DAY_OF_YEAR, 1).plus(1, YEARS);

 public static TemporalAdjuster firstInMonth(DayOfWeek dayOfWeek) {
        return TemporalAdjusters.dayOfWeekInMonth(1, dayOfWeek);

 public static TemporalAdjuster lastInMonth(DayOfWeek dayOfWeek) {
        return TemporalAdjusters.dayOfWeekInMonth(-1, dayOfWeek);

 public static TemporalAdjuster next(DayOfWeek dayOfWeek) {
        int dowValue = dayOfWeek.getValue();
        return (temporal) -> {
            int calDow = temporal.get(DAY_OF_WEEK);
            int daysDiff = calDow - dowValue;
            return temporal.plus(daysDiff >= 0 ? 7 - daysDiff : -daysDiff, DAYS);

All are returning TemporalAdjuster implementation using Lambda Expression.

5. Custom TemporalAdjuster Implementation

As of now, We've seen examples using predefined TemporalAdjuster's. Now, we'll write our own implementation.

In this custom code, We add 10 days to the actual date.

5.1 Using Lambda

Creating a custom TemporalAdjuster using Lambda Expression.

Creating a custom TemporalAdjuster to increment 10 days.

// Creating a custom TemporalAdjuster to increment 10 days.

TemporalAdjuster customAdjuster = (temporal) -> temporal.plus(Period.ofDays(10));

LocalDate localDate = LocalDate.now();
System.out.println("Date Before applying custom TemporalAdjuster : "+localDate);
localDate = localDate.with(customAdjuster);
System.out.println("Date After applying custom TemporalAdjuster : "+localDate);


Date Before applying custom TemporalAdjuster : 2019-08-06
Date After applying custom TemporalAdjuster : 2019-08-16

5.2 Implementing TemporalAdjuster interface

Before java 8, it is done by implementing interface as below.

class CustomTemporalAdjuster implements TemporalAdjuster {
 public Temporal adjustInto(Temporal temporal) {
  return temporal.plus(Period.ofDays(10));


If you create the object for this and pass it to the with() function that produces the same result as using Lambda.

6. Conclusion

In this article, We've covered what is TemporalAdjusters class introduced in Java 8.

Introduction to Temporal interface and TemporalAdjuster Functional Interface.

Described all Temporal and TemporalAdjuster implementations classes list.

Examples programs on TemporalAdjusters to get the firstDayOfMonth, firstDayOfNextMonth, firstDayOfNextYear and etc using predefined TemporalAdjuster mehtods.

Finally, Implemented custom TemporalAdjuster behavior using Lambda and older passion by implementing the TemporalAdjuster interface.

All the code shown in this article is over GitHub.
Temporal API
TemporalAdjusters API Ref



About Us

Author: Venkatesh - I love to learn and share the technical stuff.

accumulo,1,ActiveMQ,2,Adsense,1,API,31,ArrayList,16,Arrays,2,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,4,Collections,20,Collector,1,Command Line,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,5,Core Java,73,Corona India,1,Create,2,CSS,1,Date,2,Date Time API,3,Dictionary,1,Difference,1,Download,1,Eclipse,2,Efficiently,1,Error,1,Errors,1,Exception,1,Exceptions,3,Fast,1,Files,9,Float,1,Font,1,For examples,1,For loop examples,1,For Loop in Java,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,4,Grant,1,Grep,1,HashMap,1,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Inner for loops,1,Installation,1,Interview Questions,5,Iterate,2,Jackson API,3,Java,28,Java 10,1,Java 11,5,Java 12,5,Java 13,2,Java 14,2,java 5 For loop,1,Java 8,48,Java 9,1,Java Design Patterns,1,Java Files,1,Java for loop,1,Java Program,2,Java Programs,65,java.lang,5,java.util. function,1,jQuery,1,Kotlin,10,Kotlin Programs,6,Lambda,1,lang,29,Leap Year,1,live updates,1,Mac OS,2,Math,1,Maven,1,Method References,1,Mockito,1,MongoDB,3,Nested for loop,1,Nested for loop examples,1,New Features,1,Operations,1,Optional,4,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Stream,3,Streams,11,String,48,String Programs,8,String Revese,1,Swing,1,System,1,Tags,1,Threads,8,Tomcat,1,Tomcat 8,1,Troubleshoot,16,Unix,2,Updates,3,util,5,While Loop,1,
JavaProgramTo.com: Java 8 – TemporalAdjusters examples
Java 8 – TemporalAdjusters examples
A quick guide to Java 8 TemporalAdjusters with Example program and Custom Implementation to define our own TemporalAdjuster logic.
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content