Qual è il modo più semplice per ottenere un oggetto Calendar
da java.time.Instant
o java.time.ZonedDateTime
?Conversione di java.time in Calendario
risposta
Ottenere un Calendar
immediato da ZonedDateTime
è abbastanza straight-forward, a condizione di sapere che esiste un metodo GregorianCalendar#from(ZonedDateTime)
. C'è stata una discussione in Threeten-dev mail group, sul perché il metodo non è nella classe Calendar
. Non una discussione molto profonda però.
Tuttavia, non esiste un modo diretto per convertire da Instant
a Calendar
. Hai di avere uno stato intermedio per questo:
Instant instant = Instant.now();
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
Calendar cal1 = GregorianCalendar.from(zdt);
Questo è probabilmente perché, come evidente dalla tabella a this oracle tutorial, un Instant
mappe a Date
piuttosto che un Calendar
. Allo stesso modo, un ZonedDateTime
esegue il mapping su un Calendar
.
Che ne dici di GregorianCalendar.from(ZonedDateTime.ofInstant(instant, zoneId))
?
Impossibile ottenere ZonedDateTime da TemporalAccessor: 2001-12-17T09: 30: 47Z di tipo java.time.Instant – Line
In effetti, è necessario specificare anche un ZoneId. Ho aggiornato la mia risposta. –
È necessario ottenere il fuso orario utilizzando l'istante e quindi è possibile ottenere un calendario.
Calendar myCalendar = GregorianCalendar.from(ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()));
Che cosa hai provato? Qual è il problema? Il javadoc è disponibile gratuitamente, lo sai. –
A giudicare dalla tua reputazione, sospetto che tu abbia probabilmente testato 'Calendar cal = Calendar.getInstance(); cal.setTimeInMillis (Instant.now(). toEpochMilli()); 'quindi cosa c'è di sbagliato in questa soluzione? – Pshemo
E probabilmente hai anche provato - 'GregorianCalendar.from (zonedDateTime);' –