Skip to content

Commit e59ecbc

Browse files
aliraza995pivovarit
authored andcommitted
BAEL-924: How to get all LocalDates between two dates? (eugenp#2012)
1 parent 4453358 commit e59ecbc

2 files changed

Lines changed: 110 additions & 0 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.baeldung.java9.time;
2+
3+
import java.time.LocalDate;
4+
import java.time.temporal.ChronoUnit;
5+
import java.util.ArrayList;
6+
import java.util.Calendar;
7+
import java.util.Date;
8+
import java.util.GregorianCalendar;
9+
import java.util.List;
10+
import java.util.stream.Collectors;
11+
import java.util.stream.Stream;
12+
13+
public class TimeApi {
14+
15+
public static List<Date> getDatesBetweenUsingJava7(Date startDate, Date endDate) {
16+
List<Date> datesInRange = new ArrayList<Date>();
17+
Calendar calendar = new GregorianCalendar();
18+
calendar.setTime(startDate);
19+
20+
Calendar endCalendar = new GregorianCalendar();
21+
endCalendar.setTime(endDate);
22+
23+
while (calendar.before(endCalendar)) {
24+
Date result = calendar.getTime();
25+
datesInRange.add(result);
26+
calendar.add(Calendar.DATE, 1);
27+
}
28+
return datesInRange;
29+
}
30+
31+
public static List<LocalDate> getDatesBetweenUsingJava8(LocalDate startDate, LocalDate endDate) {
32+
List<LocalDate> datesInRange = new ArrayList<LocalDate>();
33+
long numOfDaysBetween = ChronoUnit.DAYS.between(startDate, endDate);
34+
Stream.iterate(0, i -> i + 1).limit(numOfDaysBetween).forEach(i -> {
35+
datesInRange.add(startDate.plusDays(i));
36+
});
37+
return datesInRange;
38+
}
39+
40+
public static List<LocalDate> getDatesBetweenUsingJava9(LocalDate startDate, LocalDate endDate) {
41+
return startDate.datesUntil(endDate).collect(Collectors.toList());
42+
}
43+
44+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.baeldung.java9.time;
2+
3+
import java.time.LocalDate;
4+
import java.util.Calendar;
5+
import java.util.Date;
6+
import java.util.List;
7+
8+
import static org.junit.Assert.assertEquals;
9+
import org.junit.Test;
10+
11+
public class TimeApiTest {
12+
13+
@Test
14+
public void givenGetDatesBetweenWithUsingJava7_WhenStartEndDate_thenDatesList() {
15+
Date startDate = Calendar.getInstance().getTime();
16+
Calendar endCalendar = Calendar.getInstance();
17+
endCalendar.add(Calendar.DATE, 3);
18+
Date endDate = endCalendar.getTime();
19+
20+
List<Date> dates = TimeApi.getDatesBetweenUsingJava7(startDate, endDate);
21+
assertEquals(dates.size(), 3);
22+
23+
Calendar calendar = Calendar.getInstance();
24+
Date date1 = calendar.getTime();
25+
assertEquals(dates.get(0).getDay(), date1.getDay());
26+
assertEquals(dates.get(0).getMonth(), date1.getMonth());
27+
assertEquals(dates.get(0).getYear(), date1.getYear());
28+
29+
calendar.add(Calendar.DATE, 1);
30+
Date date2 = calendar.getTime();
31+
assertEquals(dates.get(1).getDay(), date2.getDay());
32+
assertEquals(dates.get(1).getMonth(), date2.getMonth());
33+
assertEquals(dates.get(1).getYear(), date2.getYear());
34+
35+
calendar.add(Calendar.DATE, 1);
36+
Date date3 = calendar.getTime();
37+
assertEquals(dates.get(2).getDay(), date3.getDay());
38+
assertEquals(dates.get(2).getMonth(), date3.getMonth());
39+
assertEquals(dates.get(2).getYear(), date3.getYear());
40+
}
41+
42+
@Test
43+
public void givenGetDatesBetweenWithUsingJava8_WhenStartEndDate_thenDatesList() {
44+
LocalDate startDate = LocalDate.now();
45+
LocalDate endDate = LocalDate.now().plusDays(3);
46+
47+
List<LocalDate> dates = TimeApi.getDatesBetweenUsingJava8(startDate, endDate);
48+
assertEquals(dates.size(), 3);
49+
assertEquals(dates.get(0), LocalDate.now());
50+
assertEquals(dates.get(1), LocalDate.now().plusDays(1));
51+
assertEquals(dates.get(2), LocalDate.now().plusDays(2));
52+
}
53+
54+
@Test
55+
public void givenGetDatesBetweenWithUsingJava9_WhenStartEndDate_thenDatesList() {
56+
LocalDate startDate = LocalDate.now();
57+
LocalDate endDate = LocalDate.now().plusDays(3);
58+
59+
List<LocalDate> dates = TimeApi.getDatesBetweenUsingJava9(startDate, endDate);
60+
assertEquals(dates.size(), 3);
61+
assertEquals(dates.get(0), LocalDate.now());
62+
assertEquals(dates.get(1), LocalDate.now().plusDays(1));
63+
assertEquals(dates.get(2), LocalDate.now().plusDays(2));
64+
}
65+
66+
}

0 commit comments

Comments
 (0)