2015-06-23 14 views
10

Ho provato come sotto, ma in entrambi i casi si sta mostrando la stessa ora? Cosa sto facendo di sbagliatoJava8 Aggiunta di ore a LocalDateTime che non funziona

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" Il tempo sta mostrando stesso come "dopo 12 ore" ...

risposta

13

La documentazione del LocalDateTime specifica l'istanza di LocalDateTime è immutabile, per esempio plusHours

public LocalDateTime plusHours(long hours)

Restituisce una copia di questo LocalDateTime con il numero specificato di ore aggiunte .

Questa istanza è immutabile e non è influenzata da questa chiamata di metodo.

Parametri:
hours - le ore da aggiungere, possono essere negativi
Returns:
un LocalDateTime sulla base di questo data-ora con le ore aggiunti, non nullo
Produce:
DateTimeException - se il risultato supera l'intervallo di date supportato

Così, si crea una nuova istanza di LocalDateTime quando eseguite più operazioni, è necessario assegnare questo valore come segue:

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

spero che possa essere utile per voi.

+0

Accidenti, ho perso la parte immutabile. Ora funziona. Grazie mille. – Raj

5

Dalla java.timepackage Javadoc (sottolineatura mia):

Le classi definite qui rappresentano i concetti principali data-time, compresi istanti, durate, date, ore, fusi orari e periodi. Si basano sul sistema di calendario ISO, che è di fatto il mondo calendario che segue le regole prolettiche gregoriane. Tutte le classi sono immutabili e thread-safe.

Dal momento che ogni classe nel pacchetto java.time è immutabile, è necessario acquisire il risultato:

LocalDateTime after = currentTime.plusHours(12); 
... 
Problemi correlati