tl; dr
myGregCal.toZonedDateTime().toEpochSecond() // Convert from troublesome legacy `GregorianCalendar` to modern `ZonedDateTime`.
E andando nella direzione opposta ...
GregorianCalendar.from( // Convert from modern `ZonedDateTime` to troublesome legacy class `GregorianCalendar`.
Instant.ofEpochSecond(yourCountOfWholeSecondsSinceEpoch) // Moment in UTC.
.atZone( // Apply `ZoneId` to `Instant` to produce a `ZonedDateTime` object.
ZoneId.of("Africa/Tunis")
)
)
Evitare legacy classi data-ora
Le altre risposte sono corrette e breve. Ma, FYI, le classi fastidiosi scendere Data-time come java.util.Date
, java.util.Calendar
e java.text.SimpleDateFormat
sono ora legacy, soppiantato dalle java.time classi integrate in Java 8 & Java 9.
Così qui è come convertire e utilizzare il moderno classi invece per il tuo problema.
java.time
Converti dalla classe legacy GregorianCalendar
alla classe moderna ZonedDateTime
. Chiama i nuovi metodi aggiunti alle vecchie classi.
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
E andando nella direzione opposta ...
GregorianCalendar myGregCal = GregorianCalendar.from(zdt) ;
Se per “Unix time” si intende un conteggio di interi secondi dal momento che la epoch reference di primo istante del 1970 in UTC, 1970-01-01T00: 00: 00Z , quindi chiama toEpochSecond
.
long secondsSinceEpoch = zdt.toEpochSecond() ;
Se si intende un conteggio di millisecondi dal 1970 ha iniziato in UTC, poi estrarre un Instant
. La classe Instant
rappresenta un momento nella timeline in UTC con una risoluzione di nanoseconds (fino a nove (9) cifre di una frazione decimale).
Instant instant = zdt.toInstant() ;
Ora ask for the count of milliseconds.
long millisecondsSinceEpoch = instant.toEpochMill() ;
Tenete a mente che chiedere sia per secondi interi o milliseconds può comportare la perdita di dati. I codici ZonedDateTime
e Instant
risolvono entrambi in nanosecondi. Quindi qualsiasi microseconds o nanosecondo eventualmente presente verrà ignorato mentre conti tutti i secondi o millisecondi.
Chi java.time
Il quadro java.time è costruito in Java 8 e versioni successive. Queste classi soppiantano le fastidiose classi di data legacy come java.util.Date
, Calendar
, & SimpleDateFormat
.
Il progetto Joda-Time, ora in maintenance mode, consiglia la migrazione alle classi java.time.
Per ulteriori informazioni, vedere Oracle Tutorial. E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310.
Utilizzando un JDBC driver compatibile con JDBC 4.2 o poi, si può scambiare java.time oggetti direttamente con il database. Nessuna necessità di stringhe o classi java.sql. *.
Dove ottenere le classi java.time?
- Java SE 8, Java SE 9, e più tardi
- incorporato.
- Parte dell'API Java standard con un'implementazione in bundle.
- Java 9 aggiunge alcune funzionalità e correzioni minori.
- Java SE 6 e Java SE 7
- Molte delle funzionalità java.time è di back-porting per Java 6 .
- Android
- versioni successive di implementazioni fascio Android delle classi java.time.
- Per Android precedente, il progetto ThreeTenABP si adatta a ThreeTen-Backport (menzionato sopra). Vedi How to use ThreeTenABP….
Il progetto ThreeTen-Extra java.time prolunga con classi aggiuntive. Questo progetto è un terreno di prova per possibili aggiunte future a java.time. È possibile trovare alcune classi utili come Interval
, YearWeek
, YearQuarter
e more.
+1 per tempo joda –
Hey, grazie. Ho solo bisogno del codice che hai scritto. Molte grazie! – androidNoob
Da quando il tempo di unix non ha avuto millisecondi? – Pacerier