gpt4 book ai didi

Java 8 LocalDate - 如何获取两个日期之间的所有日期?

转载 作者:IT老高 更新时间:2023-10-28 20:32:52 25 4
gpt4 key购买 nike

是否可以在新的 java.time API 中获取两个日期之间的所有日期

假设我有这部分代码:

@Test
public void testGenerateChartCalendarData() {
LocalDate startDate = LocalDate.now();

LocalDate endDate = startDate.plusMonths(1);
endDate = endDate.withDayOfMonth(endDate.lengthOfMonth());
}

现在我需要 startDateendDate 之间的所有日期。

我正在考虑获取两个日期的 daysBetween 并迭代:

long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);

for(int i = 0; i <= daysBetween; i++){
startDate.plusDays(i); //...do the stuff with the new date...
}

有没有更好的方法来获取日期?

最佳答案

假设您主要想迭代日期范围,创建一个可迭代的 DateRange 类是有意义的。这将允许你写:

for (LocalDate d : DateRange.between(startDate, endDate)) ...

类似:

public class DateRange implements Iterable<LocalDate> {

private final LocalDate startDate;
private final LocalDate endDate;

public DateRange(LocalDate startDate, LocalDate endDate) {
//check that range is valid (null, start < end)
this.startDate = startDate;
this.endDate = endDate;
}

@Override
public Iterator<LocalDate> iterator() {
return stream().iterator();
}

public Stream<LocalDate> stream() {
return Stream.iterate(startDate, d -> d.plusDays(1))
.limit(ChronoUnit.DAYS.between(startDate, endDate) + 1);
}

public List<LocalDate> toList() { //could also be built from the stream() method
List<LocalDate> dates = new ArrayList<> ();
for (LocalDate d = startDate; !d.isAfter(endDate); d = d.plusDays(1)) {
dates.add(d);
}
return dates;
}
}

添加 equals 和 hashcode 方法、getter 是有意义的,也许有一个静态工厂 + 私有(private)构造函数来匹配 Java 时间 API 等的编码风格。

关于Java 8 LocalDate - 如何获取两个日期之间的所有日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38220543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com