tl; dr
myGregCal.toZonedDateTime().toEpochSecond() // Convert from troublesome legacy `GregorianCalendar` to modern `ZonedDateTime`.
Y va la otra dirección ...
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")
)
)
Evitar el legado clases de fecha y hora
Las otras respuestas son correctas y corto. Pero, para tu información, las clases de fecha y hora viejas problemáticas tales como java.util.Date
, java.util.Calendar
y java.text.SimpleDateFormat
son ahora legacy, suplantados por los java.time clases integradas en Java 8 & Java 9.
Así que aquí es cómo convertir y utilizar la moderna clases en su lugar para su problema.
java.time
Convertir de la clase legado GregorianCalendar
a la clase moderna ZonedDateTime
. Llame a nuevos métodos agregados a las clases antiguas.
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
Y va la otra dirección ...
GregorianCalendar myGregCal = GregorianCalendar.from(zdt) ;
Si por “Unix time” que significaba un recuento de segundos enteros desde el epoch reference del primer momento de 1970 en UTC, 1970-01-01T00: 00: 00Z , luego llama al toEpochSecond
.
long secondsSinceEpoch = zdt.toEpochSecond() ;
Si usted significó un recuento de milisegundos desde el año 1970 se inició en UTC, a continuación, extraer un Instant
. La clase Instant
representa un momento en la línea de tiempo en UTC con una resolución de nanoseconds (hasta nueve (9) dígitos de una fracción decimal).
Instant instant = zdt.toInstant() ;
Ahora ask for the count of milliseconds.
long millisecondsSinceEpoch = instant.toEpochMill() ;
Tenga en cuenta que el pedir, ya sea enteros o segundo milliseconds puede implicar la pérdida de datos. El ZonedDateTime
y el Instant
ambos resuelven en nanosegundos. Por lo tanto, cualquier microseconds o nanosegundos que puedan estar presentes se ignorarán a medida que cuente sus segundos o milisegundos completos.
Sobre java.time
El marco java.time está incorporado en Java 8 y versiones posteriores. Estas clases suplantan a las viejas y problemáticas clases de fecha y hora de legacy, como java.util.Date
, Calendar
, & SimpleDateFormat
.
El proyecto Joda-Time, ahora en maintenance mode, recomienda la migración a las clases java.time.
Para obtener más información, consulte el Oracle Tutorial. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.
El uso de un JDBC driver compatible con JDBC 4.2 o temprano, es posible intercambiar java.time objetos directamente con su base de datos. No necesita cadenas ni clases java.sql. *.
¿Dónde obtener las clases java.time?
- Java SE 8, Java SE 9, y más tarde
- incorporado.
- Parte de la API estándar de Java con una implementación integrada.
- Java 9 agrega algunas características menores y correcciones.
- Java SE 6 y Java SE 7
- Gran parte de la funcionalidad de back-java.time está portado a Java 6 & 7 en ThreeTen-Backport.
- Android
- Las versiones posteriores de las implementaciones de haces de Android de las clases java.time.
- Para Android anterior, el proyecto ThreeTenABP se adapta a ThreeTen-Backport (mencionado anteriormente). Ver How to use ThreeTenABP….
El proyecto se extiende ThreeTen-Extra java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
y more.
+1 por tiempo joda –
Hola gracias. Solo necesitaba el código que escribiste. ¡Muchas gracias! – androidNoob
¿Desde cuándo el tiempo de Unix no tiene milisegundos? – Pacerier