2016-04-28 11 views
7

Gibt es eine schönere Art, LocalDateTime Objekte zu konstruieren, die heute um 6 Uhr morgens dargestellt werden?Java 8 LocalDateTime heute zur bestimmten Stunde

LocalDateTime todayAt6 = LocalDateTime.now().withHour(6).withMinute(0).withSecond(0).withNano(0); 

Irgendwie mag ich nicht mit Minuten/Sekunden/nano zu tun, wenn alles, was ich now().withHours() ist sagen will.

Antwort

15

LocalDate verschiedene überladene hat atTime Methoden, wie this one, die zwei Argumente (Stunde des Tages und Minute) dauert:

LocalDateTime todayAt6 = LocalDate.now().atTime(6, 0); 
3

Die akzeptierte Antwort ist gut. Sie können auch Ihre eigenen clock schaffen, dies zu tun:

Clock clock = Clock.tick(Clock.systemDefaultZone(), Duration.ofHours(1)); 
LocalDateTime dt = LocalDateTime.now(clock); 

Dies ist eine nützliche Option sein kann, wenn wiederholt verwendet wird, weil die Uhr in einer statischen Variablen gespeichert werden kann:

public static final Clock CLOCK = Clock.tick(Clock.systemDefaultZone(), Duration.ofHours(1)); 
LocalDateTime dt = LocalDateTime.now(CLOCK); 
1

Eine weitere Alternative (speziell Wenn Sie eine bereits vorhandene LocalDateTime ändern möchten, verwenden Sie die with() method.

Es akzeptiert eine TemporalAdjuster als Parameter. Und nach javadoc, eine LocalTime, um diese Methode übergeben tut genau das, was Sie brauchen:

Die Klassen LOCALDATE und Localtime TemporalAdjuster implementieren, so kann diese Methode das Datum, die Uhrzeit oder Offset ändern verwendet werden:

    Ergebnis = localDateTime.with (Datum);
    Ergebnis = localDateTime.with (Zeit);

So wird der Code sein:

LocalDateTime todayAt6 = LocalDateTime.now().with(LocalTime.of(6, 0)); 
0

Eine Alternative zu LocalDate.now().atTime(6, 0) ist:

import java.time.temporal.ChronoUnit; 

LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).withHour(6); 
Verwandte Themen