2015-02-28 16 views
7

Qual è il modo più semplice per ottenere un oggetto Calendar da java.time.Instant o java.time.ZonedDateTime?Conversione di java.time in Calendario

+0

Che cosa hai provato? Qual è il problema? Il javadoc è disponibile gratuitamente, lo sai. –

+2

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

+1

E probabilmente hai anche provato - 'GregorianCalendar.from (zonedDateTime);' –

risposta

8

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.

0

Che ne dici di GregorianCalendar.from(ZonedDateTime.ofInstant(instant, zoneId))?

+0

Impossibile ottenere ZonedDateTime da TemporalAccessor: 2001-12-17T09: 30: 47Z di tipo java.time.Instant – Line

+0

In effetti, è necessario specificare anche un ZoneId. Ho aggiornato la mia risposta. –

1

È necessario ottenere il fuso orario utilizzando l'istante e quindi è possibile ottenere un calendario.

Calendar myCalendar = GregorianCalendar.from(ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault())); 
Problemi correlati