Comment obtenir la fin de la journée lorsqu'on lui donne un LocalDate?

Comment obtenir la fin de la journée lorsqu'on lui donne un LocalDate?

Je pourrais l'obtenir en faisant

LocalDateTime.of(LocalDate.now(), LocalTime.of(23, 59, 59));

Mais existe-t-il une méthode 'atStartOfDay' équivalente pour la fin de la journée?

LocalDate.now().atStartOfDay();
LocalDate.now().atEndOfDay(); //doesn't work
25
demandé sur cooxie 2016-04-04 19:57:29

3 réponses

Voici quelques alternatives, en fonction de ce dont vous avez besoin:

LocalDate.now().atTime(23, 59, 59);     //23:59:59
LocalDate.now().atTime(LocalTime.MAX);  //23:59:59.999999999

Mais il n'y a pas de méthode intégrée.

Comme indiqué par @JBNizet, si vous souhaitez créer un intervalle, vous pouvez également utiliser un intervalle jusqu'à minuit, exclusif.

45
répondu assylias 2016-04-04 17:07:12

Ce sont les variantes disponibles dans LocalTime, avis MIDNIGHT et MIN sont égaux.

LocalDate.now().atTime(LocalTime.MIDNIGHT); //00:00:00.000000000
LocalDate.now().atTime(LocalTime.MIN);      //00:00:00.000000000
LocalDate.now().atTime(LocalTime.NOON);     //12:00:00.000000000
LocalDate.now().atTime(LocalTime.MAX);      //23:59:59.999999999

Pour référence, c'est l'implémentation dans java.time.LocalTime

/**
 * Constants for the local time of each hour.
 */
private static final LocalTime[] HOURS = new LocalTime[24];
static {
    for (int i = 0; i < HOURS.length; i++) {
        HOURS[i] = new LocalTime(i, 0, 0, 0);
    }
    MIDNIGHT = HOURS[0];
    NOON = HOURS[12];
    MIN = HOURS[0];
    MAX = new LocalTime(23, 59, 59, 999_999_999);
}
6
répondu Robert Hunt 2018-01-04 15:07:16

Obtenez le début du lendemain et soustrayez-en 1 seconde. Cela devrait fonctionner pour vous. :

public static void main(String[] args) {

    LocalDate date = LocalDate.now();
    LocalDateTime dt = date.atStartOfDay().plusDays(1).minusSeconds(1);
    System.out.println(dt);
}

O / P:

2016-04-04T23:59:59
5
répondu TheLostMind 2016-04-04 17:01:07