Itérer sur une plage de dates en Java

Itérer sur une plage de dates en Java

1. Vue d'ensemble

Dans ce didacticiel rapide, nous étudierons plusieurs façons de procéder à une itération sur une plage de dates, en utilisant une date de début et une date de fin, en Java 7, Java 8 et Java 9.

2. Java 7

À partir de 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.

Voyons un exemple utilisant une simple bouclewhile avec les classesjava.util.Date etjava.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

À partir de Java 8,we can use the new Java 8 Date API. Cela nous donne des objets auto-manipulables, immuables, fluides et sans fil. Il a égalementallows us to write cleaner code without the need for a helper class commejava.util.Calendar pour incrémenter les dates.

Utilisons une simple bouclefor, la classeLocalDate et la méthodeplusDays(1) pour avancer dans la plage de dates:

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

Il convient de noter ici 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.

Veuillez consulterthis article pour une explication plus détaillée de l'API Java 8 Date.

4. Java 9+

Java 9 introduces the method datesUntil, which lets us use the Stream API pour itérer de la date de début à la date de fin.

Mettons à jour notre exemple de code pour tirer parti de cette fonctionnalité:

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

5. Conclusion

Comme nous l'avons vu dans cet article rapide, l'itération sur une plage de dates est une tâche simple en Java. Cela est particulièrement vrai avec Java 8 et les versions ultérieures, où nous pouvons gérer les dates plus facilement avec l'API Date.

Notez que dans Java 7 et les versions antérieures, il est recommandé de traiter à la fois la date et l'heure, même si nous n'utilisons que des dates.

Cependant, avec Java 8 et versions ultérieures, nous avons l'avantage de choisir une classe appropriée à partir de l'API Date commeLocalDate,LocalDateTime, et d'autres options, en fonction de nos besoins.

Et bien sûr, à partir de Java 9, nous pouvons utiliser l'API Stream en conjonction avec l'API Date pour itérer un flux de dates.

Comme toujours, les extraits de code peuvent être trouvésover on GitHub.