<分区>
我有以下方法,其中我有 startDate
和 endDate
字符串类型 yyyy/mm/dd
.我想返回 List<LocalDate>
protected List<LocalDate> getDateList(String startDate, String endDate) {
//build list here
}
我如何在 Java 8 中执行此操作?
<分区>
我有以下方法,其中我有 startDate
和 endDate
字符串类型 yyyy/mm/dd
.我想返回 List<LocalDate>
protected List<LocalDate> getDateList(String startDate, String endDate) {
//build list here
}
我如何在 Java 8 中执行此操作?
最佳答案
假设您输入的数据是正确的,我们可以使用 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));
请记住确保正确处理包含的最后日期。
关于java - 如何从给定范围构建 LocalDate 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40671689/