Как получить DateTime-Local между двумя DateTime-Local в Java - PullRequest
0 голосов
/ 27 августа 2018

С помощью ответа от как получить список дат между двумя датами в java ,

Как я могу получить список DateTime-Local между двумя DateTime-Local?

Ниже приведены коды

LocalDateTime fromDate = LocalDateTime.parse("2007-12-03T10:15");
LocalDateTime toDate = LocalDateTime.parse("2107-12-03T10:15");

List<LocalDateTime> dates = new ArrayList<LocalDateTime>();

LocalDateTime current = fromDate;

while (current.isBefore(toDate)) {
    dates.add(current);
    current = current.plusDays(1);
}

System.out.println(dates); 

распечатывает [2007-12-03T10:15, 2007-12-04T10:15, 2007-12-05T10:15, 2007-12-06T10:15, 2007-12-07T10:15, 2007-12-08T10:15...

Дата увеличилась на день, а время нет.

Как я тоже могу увеличить время?

1 Ответ

0 голосов
/ 27 августа 2018

Полагаю, Spliterator может использоваться для определения разницы между датами. Например, для почасового увеличения HourlySpliterator может быть реализован следующим образом:

public class HourlySpliterator implements Spliterator<LocalDateTime>{

private final LocalDateTime endDate;
private LocalDateTime date;

public static Stream<LocalDateTime> of (LocalDateTime startDate,  LocalDateTime endDate) {
    return StreamSupport.stream(new HourlySpliterator(startDate, endDate), false);
}

private HourlySpliterator(LocalDateTime startDate, LocalDateTime endDate) {
    this.date = startDate;
    this.endDate = endDate;
}

@Override
public boolean tryAdvance(Consumer<? super LocalDateTime> action) {
    Objects.requireNonNull(action);
    action.accept(date);
    if (date.isBefore(endDate)) {
        date = date.plusHours(1);
        return true;
    }
    return false;
}

@Override
public Spliterator<LocalDateTime> trySplit() {
    return null;
}

@Override
public long estimateSize() {
    return Long.MAX_VALUE;
}

@Override
public int characteristics() {
    return DISTINCT | IMMUTABLE | NONNULL | ORDERED | SORTED ;
}

@Override
public Comparator<? super LocalDateTime> getComparator() {
   return Comparator.naturalOrder();
}

}

Это можно проверить как:

@Test
public void test() throws Exception {

        List<LocalDateTime> dates = new ArrayList<LocalDateTime>();

        HourlySpliterator.of(LocalDateTime.parse("2007-12-03T10:15"), LocalDateTime.parse("2007-12-05T10:15"))
        .forEach(dates::add); 

        System.out.println(dates); 


}
...