Java 8 Add Days to Current Date Example
1. Introduction
Java 8 added a new set of packages to provide a comprehensive date-time model. Java 8 Date-Time API is a JSR-310 implementation. In this example, I will use classes from the java.time andjava.time.format packages to demonstrate how to add days to the current date.
java.timeis the base package which includes a set of date-time classes: LocalDate,LocalDateTime,Instant,Period,Duration,Clock,ZonedDateTime, etc. These classes use the calendar system defined inISO-8601 as the default calendar. Each class has anow()method to get the current date and common utility operations: plus, minus, format, etc.java.time.formatincludes classes for formatting and parsing date and time objects.
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-date</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>
3.2 Add Days with LocalDate
LocalDate is a date class without a time-zone in the ISO-8601 calendar system, such as 2018-10-25.
In this step, I will demonstrate how to add days to the current date usingLocalDate in two steps:
- Get the current date via the
nowmethod. - Add days via the
plusDaysandplusmethods.
AddDays_LocalDate.java
package com.zheng.demo;import java.time.LocalDate;import java.time.Period;import java.time.ZoneId;import java.time.temporal.ChronoUnit;public class AddDays_LocalDate {private LocalDate currentDate;public AddDays_LocalDate() {super();currentDate = LocalDate.now();}public AddDays_LocalDate(ZoneId zoneId) {currentDate = LocalDate.now(zoneId);}public LocalDate addDays_by_plusDays(Long days) {return currentDate.plusDays(days.longValue());}public LocalDate addDays_by_plus(Long days) {return currentDate.plus(Period.ofDays(days.intValue()));}public LocalDate addDays_by_plus_2(Long days) {return currentDate.plus(days.longValue(), ChronoUnit.DAYS);}public LocalDate substractDays_by_minusDays(Long days) {return currentDate.minusDays(days.longValue());}public LocalDate getCurrentDate() {return currentDate;}public void setCurrentDate(LocalDate currentDate) {this.currentDate = currentDate;}}3.3 Add Days with LocalDateTime
LocalDateTime is a date-time class without a time-zone in the ISO-8601 calendar system, such as 2018-10-25T10:15:30.
In this step, I will demonstrate how to add days to the current date usingLocalDateTime via plus andplusDays.
AddDays_LocalDateTime.java
package com.zheng.demo;import java.time.LocalDateTime;import java.time.Period;import java.time.ZoneId;import java.time.temporal.ChronoUnit;public class AddDays_LocalDateTime {private LocalDateTime currentDate;public AddDays_LocalDateTime() {super();currentDate = LocalDateTime.now();}public AddDays_LocalDateTime(ZoneId zoneId) {currentDate = LocalDateTime.now(zoneId);}public LocalDateTime addDays_by_plusDays(Long days) {return currentDate.plusDays(days.longValue());}public LocalDateTime addDays_by_plus(Long days) {return currentDate.plus(Period.ofDays( days.intValue()));}public LocalDateTime addDays_by_plus_2(Long days) {return currentDate.plus(days.longValue(), ChronoUnit.DAYS);}public LocalDateTime substractDays_by_minusDays(Long days) {return currentDate.minusDays(days.longValue());}public LocalDateTime getCurrentDate() {return currentDate;}public void setCurrentDate(LocalDateTime currentDate) {this.currentDate = currentDate;}}3.4 Add Days with ZonedDateTime
ZonedDateTime is a date-time class with a time-zone in the ISO-8601 calendar system, such as 2018-10-25T10:15:30+01:00 US/Central.
In this step, I will demonstrate how to add days to the current date using ZonedDateTime via plus andplusDays.
AddDays_ZonedDateTime.java
package com.zheng.demo;import java.time.Period;import java.time.ZonedDateTime;import java.time.temporal.ChronoUnit;public class AddDays_ZonedDateTime {private ZonedDateTime currentDate;public AddDays_ZonedDateTime() {super();currentDate = ZonedDateTime.now();}public ZonedDateTime addDays_by_plusDays(Long days) {return currentDate.plusDays(days.longValue());}public ZonedDateTime addDays_by_plus(Long days) {return currentDate.plus(Period.ofDays(days.intValue()));}public ZonedDateTime addDays_by_plus_2(Long days) {return currentDate.plus(days.longValue(), ChronoUnit.DAYS);}public ZonedDateTime substractDays_by_minusDays(Long days) {return currentDate.minusDays(days.longValue());}public ZonedDateTime getCurrentDate() {return currentDate;}public void setCurrentDate(ZonedDateTime currentDate) {this.currentDate = currentDate;}}3.5 Add Days with Instant
Instant models a single instantaneous point on the timeline.
In this step, I will demonstrate how to add days to the current date using Instant via plus.
AddDays_Instant.java
package com.zheng.demo;import java.time.Duration;import java.time.Instant;import java.time.temporal.ChronoUnit;public class AddDays_Instant {private Instant currentDate;public AddDays_Instant() {super();currentDate = Instant.now();}public Instant addDays_by_plus_2(Long days) {return currentDate.plus(days.longValue(), ChronoUnit.DAYS);}public Instant addDays_by_plus(Long days) {return currentDate.plus(Duration.ofDays(days.longValue()));}public Instant substractDaysWithMinus(Long days) {return currentDate.minus(days.longValue(), ChronoUnit.DAYS);}public Instant getCurrentDate() {return currentDate;}public void setCurrentDate(Instant currentDate) {this.currentDate = currentDate;}}3.6 Add Days with Clock
Clock provides access to the current instant, date, and time.
In this step, I will demonstrate how to add days to the current date using Clock via instant.
AddDays_Clock.java
package com.zheng.demo;import java.time.Clock;import java.time.Instant;import java.time.temporal.ChronoUnit;public class AddDays_Clock {private Instant currentDate;public AddDays_Clock() {super();currentDate = Clock.systemUTC().instant();}public Instant addDays(Long days) {return currentDate.plus(days.longValue(), ChronoUnit.DAYS);}public Instant substractDays(Long days) {return currentDate.minus(days.longValue(), ChronoUnit.DAYS);}public Instant getCurrentDate() {return currentDate;}public void setCurrentDate(Instant currentDate) {this.currentDate = currentDate;}}4. JUnit Tests
4.1 AddDays_LocalDateTest
I will use the Java 8DateTimeFormatter to format theLocalDate as"yyyy/MM/dd" and test it by adding days to the current date.
AddDays_LocalDateTest.java
package com.zheng.demo;import static org.junit.Assert.assertTrue;import java.time.LocalDate;import java.time.ZoneId;import java.time.format.DateTimeFormatter;import org.junit.Before;import org.junit.Test;public class AddDays_LocalDateTest {private static final int DAYS = 10;private static final String ISO8601_DATE_FORMAT = "yyyy/MM/dd";private static final DateTimeFormatter dateFormat8 = DateTimeFormatter.ofPattern(ISO8601_DATE_FORMAT);private AddDays_LocalDate defaultZoneDate = new AddDays_LocalDate();private AddDays_LocalDate cstZoneDate = new AddDays_LocalDate(ZoneId.of("US/Central"));@Beforepublic void setup() {System.out.println("*****\nOriginal defaultZoneDate : " + dateFormat8.format(defaultZoneDate.getCurrentDate()));System.out.println("*****\nOriginal cstZoneDate : " + dateFormat8.format(cstZoneDate.getCurrentDate()));System.out.println("-----");}@Testpublic void test_addDays_by_plusDays() {for (int i = 0; i < DAYS; i++) {LocalDate plusDate = defaultZoneDate.addDays_by_plusDays(Long.valueOf(i));assertTrue( i == plusDate.getDayOfYear() - defaultZoneDate.getCurrentDate().getDayOfYear());System.out.println(" Plus " + i + " days = " + dateFormat8.format(plusDate));}}@Testpublic void test_substractDays_by_minusDays() {for (int i = 0; i < DAYS; i++) {LocalDate minusDate = defaultZoneDate.substractDays_by_minusDays(Long.valueOf(i));assertTrue( i == defaultZoneDate.getCurrentDate().getDayOfYear() - minusDate.getDayOfYear());System.out.println(" Minus " + i + " days = " + dateFormat8.format(minusDate));}}}4.2 AddDays_LocalDateTimeTest
I will use the Java 8DateTimeFormatter to format theLocalDateTime as"yyyy/MM/dd HH:mm:ss" and test it by adding days to the current date.
AddDays_LocalDateTimeTest.java
package com.zheng.demo;import static org.junit.Assert.assertTrue;import java.time.LocalDateTime;import java.time.ZoneId;import java.time.format.DateTimeFormatter;import org.junit.Before;import org.junit.Test;public class AddDays_LocalDateTimeTest {private static final int DAYS = 10;private static final String ISO8601_DATE_FORMAT = "yyyy/MM/dd HH:mm:ss";private static final DateTimeFormatter dateFormat8 = DateTimeFormatter.ofPattern(ISO8601_DATE_FORMAT);private AddDays_LocalDateTime defaultZoneDate = new AddDays_LocalDateTime();private AddDays_LocalDateTime cstZoneDate = new AddDays_LocalDateTime(ZoneId.of("US/Central"));@Beforepublic void setup() {System.out.println("*****\nOriginal defaultZoneDate : " + dateFormat8.format(defaultZoneDate.getCurrentDate()));System.out.println("*****\nOriginal cstZoneDate : " + dateFormat8.format(cstZoneDate.getCurrentDate()));System.out.println("-----");}@Testpublic void plus_number_of_days() {for (int i = 0; i < DAYS; i++) {LocalDateTime plusDate = defaultZoneDate.addDays_by_plusDays(Long.valueOf(i));assertTrue( i == plusDate.getDayOfYear() - defaultZoneDate.getCurrentDate().getDayOfYear());System.out.println("Plus " + i + " = " + dateFormat8.format(plusDate));}}@Testpublic void minus_number_of_days() {for (int i = 0; i < DAYS; i++) {LocalDateTime minusDate = defaultZoneDate.substractDays_by_minusDays(Long.valueOf(i));assertTrue( i == defaultZoneDate.getCurrentDate().getDayOfYear() - minusDate.getDayOfYear());System.out.println("Minus" + i + " = " + dateFormat8.format(minusDate));}}}4.3 AddDays_ZondedDateTimeTest
I will use the Java 8ZonedTimeFormatter to format theZondedDateTime and test it by adding days to the current date.

Thank you!
We will contact you soon.
AddDays_ZondedDateTimeTest.java
package com.zheng.demo;import static org.junit.Assert.assertTrue;import java.time.ZonedDateTime;import java.time.format.DateTimeFormatter;import org.junit.Before;import org.junit.Test;public class AddDays_ZonedDateTimeTest {private static final int DAYS = 10;private static final DateTimeFormatter dateFormat8 = DateTimeFormatter.ISO_OFFSET_DATE_TIME;private AddDays_ZonedDateTime defaultZoneDate = new AddDays_ZonedDateTime();@Beforepublic void setup() {System.out.println("*****\nOriginal defaultZoneDate : " + dateFormat8.format(defaultZoneDate.getCurrentDate()));System.out.println("-----");}@Testpublic void add_number_of_days_byPlusDays() {for (int i = 1; i < DAYS; i++) {ZonedDateTime plusDate = defaultZoneDate.addDays_by_plusDays(Long.valueOf(i));assertTrue( i == plusDate.getDayOfYear() - defaultZoneDate.getCurrentDate().getDayOfYear());System.out.println("PlusDays " + i + " = " + dateFormat8.format(plusDate));}}@Testpublic void add_number_of_days_byPlus() {for (int i = 1; i < DAYS; i++) {ZonedDateTime plusDate = defaultZoneDate.addDays_by_plus(Long.valueOf(i));assertTrue( i == plusDate.getDayOfYear() - defaultZoneDate.getCurrentDate().getDayOfYear());System.out.println("Plus " + i + "= " + dateFormat8.format(plusDate));}}}4.4 AddDays_InstantTest
I will add days to the current date withInstant.
AddDays_InstantTest.java
package com.zheng.demo;import java.time.Instant;import org.junit.Before;import org.junit.Test;public class AddDays_InstantTest {private AddDays_Instant defaultZoneDate = new AddDays_Instant();@Beforepublic void setup() {System.out.println("*****\nOriginal defaultZoneDate : " + defaultZoneDate.getCurrentDate());System.out.println("-----");}@Testpublic void plus_number_of_days() {for (int i = 0; i < 10; i++) {Instant plusDate = defaultZoneDate.addDays_by_plus(Long.valueOf(i));System.out.println("Plus " + i + " = " + plusDate);}}@Testpublic void minus_number_of_days() {for (int i = 0; i < 10; i++) {Instant minusDate = defaultZoneDate.substractDaysWithMinus(Long.valueOf(i));System.out.println("Minus" + i + "= " + minusDate);}}}4.5 AddDays_ClockTest
I will add days to the current date with the Clock.
AddDays_ClockTest.java
package com.zheng.demo;import java.time.Instant;import org.junit.Before;import org.junit.Test;public class AddDays_ClockTest {private AddDays_Clock defaultZoneDate = new AddDays_Clock();@Beforepublic void setup() {System.out.println("*****\nOriginal defaultZoneDate : " + defaultZoneDate.getCurrentDate());System.out.println("-----");}@Testpublic void plus_number_of_days() {for (int i = 1; i < 10; i++) {Instant plusDate = defaultZoneDate.addDays(Long.valueOf(i));System.out.println("defaultZoneDate Plus " + i + " = " + plusDate);}}@Testpublic void minus_number_of_days() {for (int i = 1; i < 10; i++) {Instant minusDate = defaultZoneDate.substractDays(Long.valueOf(i));System.out.println("defaultZoneDate Minus" + i + "= " + minusDate);}}}5. Demo
Executemvn clean install and capture the output:
Tests Output
-------------- T E S T S-------------------------------------------------------Running com.zheng.demo.AddDays_ClockTest*****Original defaultZoneDate : 2018-10-25T19:30:20.773Z-----defaultZoneDate Minus1= 2018-10-24T19:30:20.773ZdefaultZoneDate Minus2= 2018-10-23T19:30:20.773ZdefaultZoneDate Minus3= 2018-10-22T19:30:20.773ZdefaultZoneDate Minus4= 2018-10-21T19:30:20.773ZdefaultZoneDate Minus5= 2018-10-20T19:30:20.773ZdefaultZoneDate Minus6= 2018-10-19T19:30:20.773ZdefaultZoneDate Minus7= 2018-10-18T19:30:20.773ZdefaultZoneDate Minus8= 2018-10-17T19:30:20.773ZdefaultZoneDate Minus9= 2018-10-16T19:30:20.773Z*****Original defaultZoneDate : 2018-10-25T19:30:20.824Z-----defaultZoneDate Plus 1 = 2018-10-26T19:30:20.824ZdefaultZoneDate Plus 2 = 2018-10-27T19:30:20.824ZdefaultZoneDate Plus 3 = 2018-10-28T19:30:20.824ZdefaultZoneDate Plus 4 = 2018-10-29T19:30:20.824ZdefaultZoneDate Plus 5 = 2018-10-30T19:30:20.824ZdefaultZoneDate Plus 6 = 2018-10-31T19:30:20.824ZdefaultZoneDate Plus 7 = 2018-11-01T19:30:20.824ZdefaultZoneDate Plus 8 = 2018-11-02T19:30:20.824ZdefaultZoneDate Plus 9 = 2018-11-03T19:30:20.824ZTests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.154 secRunning com.zheng.demo.AddDays_InstantTest*****Original defaultZoneDate : 2018-10-25T19:30:20.829Z-----Minus0= 2018-10-25T19:30:20.829ZMinus1= 2018-10-24T19:30:20.829ZMinus2= 2018-10-23T19:30:20.829ZMinus3= 2018-10-22T19:30:20.829ZMinus4= 2018-10-21T19:30:20.829ZMinus5= 2018-10-20T19:30:20.829ZMinus6= 2018-10-19T19:30:20.829ZMinus7= 2018-10-18T19:30:20.829ZMinus8= 2018-10-17T19:30:20.829ZMinus9= 2018-10-16T19:30:20.829Z*****Original defaultZoneDate : 2018-10-25T19:30:20.831Z-----Plus 0 = 2018-10-25T19:30:20.831ZPlus 1 = 2018-10-26T19:30:20.831ZPlus 2 = 2018-10-27T19:30:20.831ZPlus 3 = 2018-10-28T19:30:20.831ZPlus 4 = 2018-10-29T19:30:20.831ZPlus 5 = 2018-10-30T19:30:20.831ZPlus 6 = 2018-10-31T19:30:20.831ZPlus 7 = 2018-11-01T19:30:20.831ZPlus 8 = 2018-11-02T19:30:20.831ZPlus 9 = 2018-11-03T19:30:20.831ZTests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 secRunning com.zheng.demo.AddDays_LocalDateTest*****Original defaultZoneDate : 2018/10/25*****Original cstZoneDate : 2018/10/25----- Plus 0 days = 2018/10/25 Plus 1 days = 2018/10/26 Plus 2 days = 2018/10/27 Plus 3 days = 2018/10/28 Plus 4 days = 2018/10/29 Plus 5 days = 2018/10/30 Plus 6 days = 2018/10/31 Plus 7 days = 2018/11/01 Plus 8 days = 2018/11/02 Plus 9 days = 2018/11/03*****Original defaultZoneDate : 2018/10/25*****Original cstZoneDate : 2018/10/25----- Minus 0 days = 2018/10/25 Minus 1 days = 2018/10/24 Minus 2 days = 2018/10/23 Minus 3 days = 2018/10/22 Minus 4 days = 2018/10/21 Minus 5 days = 2018/10/20 Minus 6 days = 2018/10/19 Minus 7 days = 2018/10/18 Minus 8 days = 2018/10/17 Minus 9 days = 2018/10/16Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.048 secRunning com.zheng.demo.AddDays_LocalDateTimeTest*****Original defaultZoneDate : 2018/10/25 14:30:20*****Original cstZoneDate : 2018/10/25 14:30:20-----Minus0 = 2018/10/25 14:30:20Minus1 = 2018/10/24 14:30:20Minus2 = 2018/10/23 14:30:20Minus3 = 2018/10/22 14:30:20Minus4 = 2018/10/21 14:30:20Minus5 = 2018/10/20 14:30:20Minus6 = 2018/10/19 14:30:20Minus7 = 2018/10/18 14:30:20Minus8 = 2018/10/17 14:30:20Minus9 = 2018/10/16 14:30:20*****Original defaultZoneDate : 2018/10/25 14:30:20*****Original cstZoneDate : 2018/10/25 14:30:20-----Plus 0 = 2018/10/25 14:30:20Plus 1 = 2018/10/26 14:30:20Plus 2 = 2018/10/27 14:30:20Plus 3 = 2018/10/28 14:30:20Plus 4 = 2018/10/29 14:30:20Plus 5 = 2018/10/30 14:30:20Plus 6 = 2018/10/31 14:30:20Plus 7 = 2018/11/01 14:30:20Plus 8 = 2018/11/02 14:30:20Plus 9 = 2018/11/03 14:30:20Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.065 secRunning com.zheng.demo.AddDays_ZonedDateTimeTest*****Original defaultZoneDate : 2018-10-25T14:30:20.876-05:00-----PlusDays 1 = 2018-10-26T14:30:20.876-05:00PlusDays 2 = 2018-10-27T14:30:20.876-05:00PlusDays 3 = 2018-10-28T14:30:20.876-05:00PlusDays 4 = 2018-10-29T14:30:20.876-05:00PlusDays 5 = 2018-10-30T14:30:20.876-05:00PlusDays 6 = 2018-10-31T14:30:20.876-05:00PlusDays 7 = 2018-11-01T14:30:20.876-05:00PlusDays 8 = 2018-11-02T14:30:20.876-05:00PlusDays 9 = 2018-11-03T14:30:20.876-05:00*****Original defaultZoneDate : 2018-10-25T14:30:20.882-05:00-----Plus 1= 2018-10-26T14:30:20.882-05:00Plus 2= 2018-10-27T14:30:20.882-05:00Plus 3= 2018-10-28T14:30:20.882-05:00Plus 4= 2018-10-29T14:30:20.882-05:00Plus 5= 2018-10-30T14:30:20.882-05:00Plus 6= 2018-10-31T14:30:20.882-05:00Plus 7= 2018-11-01T14:30:20.882-05:00Plus 8= 2018-11-02T14:30:20.882-05:00Plus 9= 2018-11-03T14:30:20.882-05:00Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.08 secResults :Tests run: 10, Failures: 0, Errors: 0, Skipped: 0
6. Java 8 Add Days to Current Date Example- Summary
In this example, we demonstrated how to add days to the current date via the classes:LocalDate,LocalDateTime,ZonedDateTime,Instant, andClock.
7. Download the Source Code
This example consists of a Maven project to add days to the current date using Java 8 Date-Time API.
You can download the full source code of this example here:Java 8 Add days to Current Date Example

Thank you!
We will contact you soon.



