假设您的输入数据是正确的,我们可以使用 Stream API 来生成给定范围内的所有日期:
final LocalDate start = LocalDate.parse(startDate, DateTimeFormatter.ofPattern("yyyy/MM/dd"));
final LocalDate end = LocalDate.parse(endDate, DateTimeFormatter.ofPattern("yyyy/MM/dd"));
final int days = (int) start.until(end, ChronoUnit.DAYS);
return Stream.iterate(start, d -> d.plusDays(1))
.limit(days)
.collect(Collectors.toList());
示例:
getDateList("2012/10/10", "2012/10/12")
[2012-10-10, 2012-10-11]
如果要包含结束日期,则需要使用.limit(days + 1)。
从 Java 9 开始,可以将其简化为:
Stream.iterate(start, d -> d.isBefore(end), d -> d.plusDays(1))
.collect(Collectors.toList());
甚至:
start.datesUntil(end, Period.ofDays(1));
请记住确保正确处理包含最后日期的内容。