From e59ecbc864f4b353d42db86ad84591cb63176017 Mon Sep 17 00:00:00 2001 From: Syed Ali Raza Date: Thu, 8 Jun 2017 10:47:10 +0500 Subject: [PATCH] BAEL-924: How to get all LocalDates between two dates? (#2012) --- .../java/com/baeldung/java9/time/TimeApi.java | 44 +++++++++++++ .../com/baeldung/java9/time/TimeApiTest.java | 66 +++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 core-java-9/src/main/java/com/baeldung/java9/time/TimeApi.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/time/TimeApiTest.java diff --git a/core-java-9/src/main/java/com/baeldung/java9/time/TimeApi.java b/core-java-9/src/main/java/com/baeldung/java9/time/TimeApi.java new file mode 100644 index 0000000000..9981ad0b90 --- /dev/null +++ b/core-java-9/src/main/java/com/baeldung/java9/time/TimeApi.java @@ -0,0 +1,44 @@ +package com.baeldung.java9.time; + +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class TimeApi { + + public static List getDatesBetweenUsingJava7(Date startDate, Date endDate) { + List datesInRange = new ArrayList(); + Calendar calendar = new GregorianCalendar(); + calendar.setTime(startDate); + + Calendar endCalendar = new GregorianCalendar(); + endCalendar.setTime(endDate); + + while (calendar.before(endCalendar)) { + Date result = calendar.getTime(); + datesInRange.add(result); + calendar.add(Calendar.DATE, 1); + } + return datesInRange; + } + + public static List getDatesBetweenUsingJava8(LocalDate startDate, LocalDate endDate) { + List datesInRange = new ArrayList(); + long numOfDaysBetween = ChronoUnit.DAYS.between(startDate, endDate); + Stream.iterate(0, i -> i + 1).limit(numOfDaysBetween).forEach(i -> { + datesInRange.add(startDate.plusDays(i)); + }); + return datesInRange; + } + + public static List getDatesBetweenUsingJava9(LocalDate startDate, LocalDate endDate) { + return startDate.datesUntil(endDate).collect(Collectors.toList()); + } + +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/time/TimeApiTest.java b/core-java-9/src/test/java/com/baeldung/java9/time/TimeApiTest.java new file mode 100644 index 0000000000..186902da7c --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/time/TimeApiTest.java @@ -0,0 +1,66 @@ +package com.baeldung.java9.time; + +import java.time.LocalDate; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; + +public class TimeApiTest { + + @Test + public void givenGetDatesBetweenWithUsingJava7_WhenStartEndDate_thenDatesList() { + Date startDate = Calendar.getInstance().getTime(); + Calendar endCalendar = Calendar.getInstance(); + endCalendar.add(Calendar.DATE, 3); + Date endDate = endCalendar.getTime(); + + List dates = TimeApi.getDatesBetweenUsingJava7(startDate, endDate); + assertEquals(dates.size(), 3); + + Calendar calendar = Calendar.getInstance(); + Date date1 = calendar.getTime(); + assertEquals(dates.get(0).getDay(), date1.getDay()); + assertEquals(dates.get(0).getMonth(), date1.getMonth()); + assertEquals(dates.get(0).getYear(), date1.getYear()); + + calendar.add(Calendar.DATE, 1); + Date date2 = calendar.getTime(); + assertEquals(dates.get(1).getDay(), date2.getDay()); + assertEquals(dates.get(1).getMonth(), date2.getMonth()); + assertEquals(dates.get(1).getYear(), date2.getYear()); + + calendar.add(Calendar.DATE, 1); + Date date3 = calendar.getTime(); + assertEquals(dates.get(2).getDay(), date3.getDay()); + assertEquals(dates.get(2).getMonth(), date3.getMonth()); + assertEquals(dates.get(2).getYear(), date3.getYear()); + } + + @Test + public void givenGetDatesBetweenWithUsingJava8_WhenStartEndDate_thenDatesList() { + LocalDate startDate = LocalDate.now(); + LocalDate endDate = LocalDate.now().plusDays(3); + + List dates = TimeApi.getDatesBetweenUsingJava8(startDate, endDate); + assertEquals(dates.size(), 3); + assertEquals(dates.get(0), LocalDate.now()); + assertEquals(dates.get(1), LocalDate.now().plusDays(1)); + assertEquals(dates.get(2), LocalDate.now().plusDays(2)); + } + + @Test + public void givenGetDatesBetweenWithUsingJava9_WhenStartEndDate_thenDatesList() { + LocalDate startDate = LocalDate.now(); + LocalDate endDate = LocalDate.now().plusDays(3); + + List dates = TimeApi.getDatesBetweenUsingJava9(startDate, endDate); + assertEquals(dates.size(), 3); + assertEquals(dates.get(0), LocalDate.now()); + assertEquals(dates.get(1), LocalDate.now().plusDays(1)); + assertEquals(dates.get(2), LocalDate.now().plusDays(2)); + } + +}