2014-12-07 36 views
7

Non sto davvero capendo i regolatori temporali o la nuova libreria di tempo di Java anche dopo aver letto numerosi tutorial.Come convertire un Instant in un LocalTime?

Come convertire un oggetto Instant in un oggetto LocalTime. Stavo pensando qualcosa del seguente:

LocalTime time = LocalTime.of(
     instantStart.get(ChronoField.HOUR_OF_DAY), 
     instantStart.get(ChronoField.MINUTE_OF_HOUR) 
    ); 

Ma non funziona. Come lo farei?

risposta

11

Il modo in cui lo capisco ... Instant è uno stile UTC, agnostico di zona sempre UTC. LocaleTime è il tempo in una determinata zona. Quindi, ci si aspetta il seguente avrebbe funzionato visto che Immediata implementa TemporalAccessor,

Instant instant = Instant.now(); 
LocalTime local = LocalTime.from(instant); 

ma si ottiene "Impossibile ottenere LocalTime da TemporalAccessor" errore. Invece è necessario indicare dove si trova "local". Non esiste un valore predefinito, probabilmente una buona cosa.

Instant instant = Instant.now(); 
LocalTime local = LocalTime.from(instant.atZone(ZoneId.of("GMT+3"))); 
System.out.println(String.format("%s => %s", instant, local)); 

uscita

2014-12-07T07:52:43.900Z => 10:52:43.900 

instantStart.get (ChronoField.HOUR_OF_DAY) genera un errore perché non concettualmente lo supporta, è possibile accedere solo tramite HOUR_OF_DAY ecc un'istanza LocalTime.

+0

Ah. Bene, ho avuto molte incomprensioni sulle lezioni stesse. Sto cercando di memorizzare l'ora di inizio e di fine di un evento in un calendario come due istanze. quindi fai una durata da quelle istanze. Cosa dovrei fare invece? Come dovrei andare a memorizzare queste informazioni usando le classi Java 8 Time. E inoltre non sono sicuro di aver compreso gli Accessors temporali dalla spiegazione fornita dai tutorial di Oracle. Dove potrei andare per imparare che in modo migliore? – Connorelsea

+2

@Connorelsea Non sono un esperto, trovo la nuova API java.time incredibilmente confusa. Penserei che memorizzare gli istanti sarebbe meglio e utilizzare solo LocalTime per quando è effettivamente necessario visualizzare all'utente (in un determinato fuso orario). – Adam

+0

In realtà, LocalTime non include un fuso orario. Il suo javadoc afferma: "Questa classe non memorizza o rappresenta una data o un fuso orario, ma è una descrizione dell'ora locale vista su un orologio da parete." Afaik, un istantaneo non ha concetto come ora del giorno, ma solo pochi secondi dall'epoca. Ecco perché devi prima creare un ZonedDateTime da quell'istante. – Alex