2015-06-23 12 views
10

Próbowałem jak poniżej, ale w obu przypadkach pokazuje się ten sam czas? Co robię źle.Java8 Dodawanie godzin do LocalDateTime Nie działa

LocalDateTime currentTime = LocalDateTime.now(ZoneId.of("UTC")); 
    Instant instant = currentTime.toInstant(ZoneOffset.UTC); 
    Date currentDate = Date.from(instant); 
    System.out.println("Current Date = " + currentDate); 
    currentTime.plusHours(12); 
    Instant instant2 = currentTime.toInstant(ZoneOffset.UTC); 
    Date expiryDate = Date.from(instant2); 
    System.out.println("After 12 Hours = " + expiryDate); 

"Current Date" Czas pokazuje to samo co "po 12 godzinach" ...

Odpowiedz

13

Dokumentacja LocalDateTime określa wystąpienie LocalDateTime jest niezmienny, na przykład plusHours

public LocalDateTime plusHours(long hours)

Powoduje zwrócenie kopii tej LocalDateTime z podaną liczbą godzin dodanych .

Ta instancja jest niezmienna i nie ma wpływu na to wywołanie metody.

Parametry:
hours - godziny dodać, mogą być negatywne
Powroty:
LocalDateTime na podstawie tej daty i czasu z godziny dodanej, not null
rzuca:
DateTimeException - jeśli wynik przekracza obsługiwany zakres dat

Więc utworzyć nową instancję LocalDateTime podczas wykonywania plusa operację, trzeba przypisać tę wartość w następujący sposób:

LocalDateTime nextTime = currentTime.plusHours(12); 
    Instant instant2 = nextTime.toInstant(ZoneOffset.UTC); 
    Date expiryDate = Date.from(instant2); 
    System.out.println("After 12 Hours = " + expiryDate); 

Mam nadzieję, że to może być pomocne dla Ciebie.

+0

Cholera, brakowało mi niezmienna część. Teraz działa. Dziękuję Ci bardzo. – Raj

5

Z java.timepackage Javadoc kopalni (nacisk):

klas zdefiniowanych tutaj reprezentują główne koncepcje daty i godziny, tym momentom, trwania, daty, godziny, strefach czasowych oraz okresy. Są one oparte na systemie kalendarza ISO, który jest de facto światem kalendarzowym zgodnie z zasadami gremijańskiego. Wszystkie klasy są niezmienne i bezpieczne dla wątków.

Ponieważ każda klasa w pakiecie java.time jest niezmienna, trzeba uchwycić wynik:

LocalDateTime after = currentTime.plusHours(12); 
... 
Powiązane problemy