java - 如何从给定范围构建 LocalDate 列表?

标签 java list date java-8 java-stream

<分区>

我有以下方法,其中我有 startDateendDate字符串类型 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/

相关文章:

java - 在某个值之后搜索列表中的最小元素

date - Elasticsearch:在日期直方图中为每个存储桶添加一个过滤范围

c# - 如何将 javascript 数字日期转换为 C# 日期(使用 C#,而不是 javascript!)

java - 错误 - trustAnchors 参数必须非空

java - 如何按组聚合通量上的元素/如何按组减少?

java - 关于Java内存管理

python 从列表中删除元素而不更改其他元素的索引

python - 比较序列 Python

java - 如何检查日期对象是否等于昨天?

java - 使用 JPA 和 Hibernate 在 Persistence.xml 中配置 C3P0