¿Cómo puedo convertir de calendario gregoriano a Unix Time, en Java?
-
26-09-2019 - |
Pregunta
Estoy en la necesidad de un método para convertir GregorianCalendar de objetos para Unix Time (es decir, un tiempo). También es necesario un método para convertir Unix Tiempo atrás (largo) a GregorianCalendar objeto. ¿Existen métodos por ahí que hace esto? Si no es así, entonces, ¿cómo puedo hacerlo? Cualquier ayuda sería muy apreciada.
Enlace a GregorianCalendar Clase -> http : //download.oracle.com/javase/1.4.2/docs/api/java/util/GregorianCalendar.html
Gracias.
Solución
Los métodos getTimeInMillis()
y setTimeInMillis(long)
le permitirá obtener y establecer el tiempo en milisegundos, que es el tiempo Unix multiplicado por 1000. Usted tendrá que ajustar manualmente desde el tiempo UNIX no incluye milisegundos -. Sólo unos segundos
long unixTime = gregCal.getTimeInMillis() / 1000; gregCal.setTimeInMillis(unixTime * 1000);
Aparte : si utiliza fechas mucho en su aplicación, sobre todo si va a convertir las fechas o el uso de múltiples zonas horarias, recomiendo encarecidamente utilizar el biblioteca JodaTime . Es muy completo y un poco más natural de entender que el sistema de calendario que viene con Java.
Otros consejos
GregorianCalendar .getTimeInMillis () y GregorianCalendar.SetTimeInMillis () le permitirá obtener y establecer valores de tiempo de la manera deseada.
Vea las setTimeInMillis y getTimeInMillis funciones: http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html#getTimeInMillis ()
Calendar.getTimeInMillis () debe ser lo que estás buscando.
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 legado , suplantado por el java.time clases incorporado en Java 8 y 9. Java
Así que aquí es cómo convertir y utilizar las clases modernas lugar para su problema.
java.time
Convertir de la clase GregorianCalendar
legado a la ZonedDateTime
clases moderna. Llame a nuevos métodos añadidos a las antiguas clases.
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
Y va la otra dirección ...
GregorianCalendar myGregCal = GregorianCalendar.from( zdt ) ;
Si por “tiempo Unix” que significaba un recuento de segundos enteros ya que el referencia época del primer momento de 1970 en UTC, 1970-01-01T00: 00: 00Z , a continuación, llamar toEpochSecond
.
long secondsSinceEpoch = zdt.toEpochSecond() ;
Si usted significó un recuento de milisegundos desde 1970 iniciadas en UTC, a continuación, extraer un Instant
. El Instant
clase representa un momento en el línea de tiempo en UTC con una resolución de nanosegundos (hasta nueve (9) dígitos de una fracción decimal).
Instant instant = zdt.toInstant() ;
pedir el recuento de milisegundos .
long millisecondsSinceEpoch = instant.toEpochMill() ;
Tenga en cuenta que el pedir enteras en segundos o milisegundos puede implicar la pérdida de datos. El ZonedDateTime
y Instant
tanto resolución de nanosegundos. Por lo que cualquier microsegundos o nanosegundos que pueden estar presentes se ignorará mientras cuenta sus enteros segundos o milisegundos .
Acerca de java.time
El java.time marco está incorporado en Java 8 y versiones posteriores. Estas clases suplantar a la problemática de edad legado clases de fecha y hora como java.util.Date
, Calendar
, y SimpleDateFormat
.
El Joda-Time proyecto, ahora en < a href = "https://en.wikipedia.org/wiki/Maintenance_mode" rel = "noreferrer nofollow"> el modo de mantenimiento , aconseja migración a la java.time clases .
Para obtener más información, consulte la Oracle Tutorial . Y buscar desbordamiento de pila durante muchos ejemplos y explicaciones. La especificación es JSR 310 .
Uso de un conductor JDBC compatible con JDBC 4.2 o temprano, es posible intercambiar java.time objetos directamente con su base de datos. No hay necesidad de series ni java.sql. * Clases.
¿Dónde obtener las clases java.time?
- Java SE 8 , Java SE 9 , y más tarde
- Built-in.
- Parte de la API estándar de Java con una aplicación incluida.
- Java 9 añade 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 y 7 en ThreeTen-Backport .
- Android
- Las versiones posteriores de Android de haces de implementaciones de las clases java.time.
- Para principios de Android, el ThreeTenABP adapta proyecto ThreeTen-Backport (mencionados anteriormente). Ver ¿Cómo utilizar ThreeTenABP ... .
El ThreeTen-Extra Proyecto extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles futuras adiciones a java.time. Usted puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
, y más .