Hoe behaal je het einde van de dag als je een LocalDate krijgt?

Hoe behaal je het einde van de dag als je een LocalDate krijgt?

Ik zou het kunnen krijgen door

. te doen

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

Maar is er een equivalente ‘atStartOfDay’-methode voor het einde van de dag?

LocalDate.now().atStartOfDay();
LocalDate.now().atEndOfDay(); //doesn't work

Antwoord 1, autoriteit 100%

Hier zijn een paar alternatieven, afhankelijk van wat je nodig hebt:

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

Maar er is geen ingebouwde methode.

Zoals opgemerkt door @JBNizet, als je een interval wilt creëren, kun je ook een interval gebruiken tot middernacht, exclusief.


Antwoord 2, autoriteit 28%

Dit zijn de varianten die beschikbaar zijn in LocalTime, merk op dat MIDNIGHTen MINgelijk zijn.

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

Ter referentie, dit is de implementatie in 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);
}

Als de waarde die is toegewezen aan het vierde constructorargument (999_999_999) van LocalTime(die nanoOfSecondvoorstelt) er onbekend uitziet, komt dat omdat het gebruik maakt van de Java 7-functie Onderstrepingstekens in numerieke literals.

In Java SE 7 en hoger kan een willekeurig aantal onderstrepingstekens (_) overal tussen de cijfers in een numerieke letterlijke waarde voorkomen. Met deze functie kunt u bijvoorbeeld groepen cijfers scheiden in numerieke letterlijke waarden, wat de leesbaarheid van uw code kan verbeteren.


Antwoord 3, autoriteit 7%

Begin de volgende dag en trek er 1 seconde vanaf. Dit zou voor jou moeten werken. :

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

Antwoord 4

public static long getStartOfDay(String country) {
    return LocalDate.now().atStartOfDay(ZoneId.of("Europe/Berlin")).toInstant().toEpochMilli();
}
public static long getEndOfDay(long startOfDay) {
    return startOfDay + 86399000L;  // adding 24h = 1day seconds - 1
}
public static long getStartOfDay(LocalDate localDate, String country) {
    return localDate.atStartOfDay(ZoneId.of("Europe/Berlin")).toInstant().toEpochMilli();
}
public static long getEndOfDay(LocalDate localDate, String country) {
    localDate = localDate.plusDays(1L);
    return localDate.atStartOfDay(ZoneId.of("Europe/Berlin")).toInstant().toEpochMilli() - 1000L; //substract mili
}

Other episodes