2016-04-28 11 views
7

Czy jest ładniejszy/łatwiejszy sposób budowania obiektu LocalDateTime reprezentującego dziś o 6 rano niż to?Java 8 LocalDateTime dzisiaj o określonej godzinie

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

Jakoś nie lubię czynienia z minuty/sekundy/nano, gdy wszystko, co chcę powiedzieć, to now().withHours().

Odpowiedz

15

LocalDate ma różne przeciążony atTime metod, takich jak this one, która pobiera dwa argumenty (godzina dnia i minuty):

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

Zaakceptowanych odpowiedź jest dobra. Można również tworzyć własne clock to zrobić:

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

To może być użytecznym rozwiązaniem, jeśli używany wielokrotnie, bo zegar może być przechowywany w zmiennej statycznej:

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

Innym alternatywnym (specjalnie jeśli chcesz zmienić już istniejący LocalDateTime), użyj with() method.

Jako parametr przyjmuje wartość TemporalAdjuster. I zgodnie z javadoc, przekazując LocalTime tej metody robi dokładnie to, czego potrzebujesz:

LOCALDATE i Localtime klasy implementują TemporalAdjuster, więc metoda ta może być wykorzystana do zmiany daty, godziny lub offset:

    result = localDateTime.with (data);
    result = localDateTime.with (czas);

Więc kod będzie:

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

Alternatywą LocalDate.now().atTime(6, 0) jest:

import java.time.temporal.ChronoUnit; 

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