期間を示す日付を指定して、java.util.Date 、もしくは、java.time.LocalDate の Stream が欲しくなったので、メソッドを用意
Java8 でjava.util.Dateを使うのも抵抗あるけど。。。
2015-10-01 と 2015-10-03 なら、10月1日~3日の3個が取得できるものとする。
public Stream<Date> createDateStream(Date start, Date end){
LocalDateTime ldt = start.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
// 2つの日付→期間
Period p = Period.between(start.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()
, end.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()
);
// IntStream から生成
return IntStream.range(0, p.getDays() + 1)
.mapToObj(i->ldt.plusDays(i))
map(.d->Date.from(d.atZone(ZoneId.systemDefault()).toInstant()));
}
でも、LocalDate を指定して LocalDate の Stream を取得するのはもっと簡潔になる。
public Stream<LocalDate> createLocalDateStream(LocalDate start, LocalDate end){
return IntStream.range(0, Period.between(start, end).getDays() + 1).mapToObj(i->start.plusDays(i));
}
わざわざメソッドにする必要性もないかもしれないけど。。。
java.util.Date を使うのやめようかな?