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.

¿Fue útil?

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.

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?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top