Iterar através de um intervalo de datas em Java

Iterar através de um intervalo de datas em Java

1. Visão geral

Neste tutorial rápido, estudaremos várias maneiras de iterar em um intervalo de datas, usando uma data de início e término, em Java 7, Java 8 e Java 9.

2. Java 7

Começando com Java 7,we’ll use the class java.util.Date for holding the date values and java.util.Calendar for incrementing from one date to the next.

Vamos ver um exemplo usando um loopwhile simples junto com as classesjava.util.Dateejava.util.Calendar:

void iterateBetweenDatesJava7(Date start, Date end) {
    Date current = start;

    while (current.before(end)) {
        processDate(current);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(current);
        calendar.add(Calendar.DATE, 1);
        current = calendar.getTime();
    }
}

3. Java 8

Começando com Java 8,we can use the new Java 8 Date API. Isso nos fornece objetos de auto-manuseio, imutáveis, fluentes e seguros para threads. Ele tambémallows us to write cleaner code without the need for a helper class gosta dejava.util.Calendar para incrementar as datas.

Vamos usar um loopfor simples, a classeLocalDate e o métodoplusDays(1) para avançar no intervalo de datas:

void iterateBetweenDatesJava8(LocalDate start, LocalDate end) {
    for (LocalDate date = start; date.isBefore(end); date = date.plusDays(1)) {
        processDate(date);
    }
}

É importante notar aqui quealthough the Stream API is available beginning in Java 8, iterating between two dates using the Date API in conjunction with the Stream API isn’t possible until Java 9.

Verifiquethis article para uma explicação mais detalhada da API Java 8 Date.

4. Java 9 ou superior

Java 9 introduces the method datesUntil, which lets us use the Stream API para iterar da data de início à data de término.

Vamos atualizar nosso código de exemplo para aproveitar este recurso:

void iterateBetweenDatesJava9(LocalDate start, LocalDate end) {
    start.datesUntil(end).forEach(this::processDate);
}

5. Conclusão

Como vimos neste artigo rápido, iterar em um intervalo de datas é uma tarefa simples em Java. Isso é especialmente verdade ao usar o Java 8 e posterior, onde podemos lidar com datas mais facilmente com a API de data.

Observe que no Java 7 e anteriores, é recomendável lidar com data e hora, mesmo se estivermos usando apenas datas.

Porém, com o Java 8 e posterior, temos a vantagem de escolher uma classe apropriada da API Date comoLocalDate,LocalDateTime,e outras opções, de acordo com nossas necessidades.

E, é claro, a partir do Java 9, podemos usar a API Stream em conjunto com a API Date para iterar um fluxo de datas.

Como sempre, os trechos de código podem ser encontradosover on GitHub.