Lavoro con la nuova API DateTime di Java 8.
Come convertire un LocalDate in un Instant? Ottengo un'eccezione con
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
e non capisco perché.
Lavoro con la nuova API DateTime di Java 8.
Come convertire un LocalDate in un Instant? Ottengo un'eccezione con
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
e non capisco perché.
Risposte:
La Instant
classe rappresenta un punto istantaneo sulla sequenza temporale. La conversione in e da a LocalDate
richiede un fuso orario. A differenza di altre librerie di data e ora, JSR-310 non selezionerà automaticamente il fuso orario, quindi è necessario fornirlo.
LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
Questo esempio utilizza il fuso orario predefinito della JVM - ZoneId.systemDefault()
- per eseguire la conversione. Vedi qui per una risposta più lunga a una domanda correlata.
Aggiornamento: la risposta accettata utilizza LocalDateTime::toInstant(ZoneOffset)
che accetta solo ZoneOffset
. Questa risposta utilizza LocalDate::atStartOfDay(ZoneId)
che accetta qualsiasi ZoneId
. In quanto tale, questa risposta è generalmente più utile (e probabilmente dovrebbe essere quella accettata).
PS. Sono stato l'autore principale dell'API
Per convertirlo in un istante è necessario disporre di un'istanza LocalDateTime, ad esempio:
LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
LocalDate
non include un tempo.