web-dev-qa-db-fra.com

Jodatime début et fin de journée

Je veux créer un intervalle entre le début de la semaine et la fin de la semaine en cours.

J'ai le code suivant, emprunté à cette réponse :

private LocalDateTime calcNextSunday(LocalDateTime d) {
    if (d.getDayOfWeek() > DateTimeConstants.SUNDAY) {
        d = d.plusWeeks(1);
    }
    return d.withDayOfWeek(DateTimeConstants.SUNDAY);
}

private LocalDateTime calcPreviousMonday(LocalDateTime d) {
    if (d.getDayOfWeek() < DateTimeConstants.MONDAY) {
        d = d.minusWeeks(1);
    }
    return d.withDayOfWeek(DateTimeConstants.MONDAY);
}

Mais maintenant, je veux que le lundi LocalDateTime soit à 00:00:00 et le dimanche LocalDateTime à 23:59:59. Comment je ferais ça?

44
nhaarman

Que diriez-vous:

private LocalDateTime calcNextSunday(LocalDateTime d) {
    return d.withHourOfDay(23).withMinuteOfHour(59).withSecondOfMinute(59).withDayOfWeek(DateTimeConstants.SUNDAY);
}

private LocalDateTime calcPreviousMonday(final LocalDateTime d) {
    return d.withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0).withDayOfWeek(DateTimeConstants.MONDAY);
}
23
Peter Liljenberg

Vous pouvez utiliser la méthode withTime:

 d.withTime(0, 0, 0, 0);
 d.withTime(23, 59, 59, 999);

Identique à la réponse de Peter, mais plus courte.

138
JodaStephen

Pour ceux qui viennent ici à la recherche de la réponse pour "js-joda", vous pouvez utiliser les méthodes suivantes à partir de LocalDate:

    atStartOfDay(): LocalDateTime
    atStartOfDay(zone: ZoneId): ZonedDateTime
    atStartOfDayWithZone(zone: ZoneId): ZonedDateTime

Références: https://js-joda.github.io/js-joda/class/src/LocalDate.js~LocalDate.html#instance-method-atStartOfDayWithZone

0
GreeneCreations