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 MIDNIGHT
en MIN
gelijk 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 nanoOfSecond
voorstelt) 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
}