2009-04-08 17 views
205

Date.getTime() devuelve milisegundos desde el 1 de enero de 1970. Unixtime es segundos desde el 1 de enero de 1970. Normalmente no código en Java, pero estoy trabajando en algunas correcciones de errores. Tengo:Obtener "unixtime" en Java

Date now = new Date();  
Long longTime = new Long(now.getTime()/1000); 
return longTime.intValue(); 

¿Hay una mejor manera de obtener unixtime en java?

ACTUALIZACIÓN

Sobre la base de la sugerencia de John M, que terminó con:

return (int) (System.currentTimeMillis()/1000L); 
+22

Como lo has convertido en int, introduces el problema del año 2038 (el equivalente de Y2K para Unix). Ahí es cuando la época de Unix alcanza los 2 mil millones y se convierte en negativa. La solución es pasar a Unix de 64 bits. El equivalente de Java es dejarlo como un largo. –

+1

Sí, soy consciente de eso. El código con el que está interactuando espera una int de 32 bits para unixtime. –

+123

2038 viene pronto. – Pacerier

Respuesta

385

evitar la creación de objetos Fecha w/System.currentTimeMillis(). Una división por 1000 te lleva a la época de Unix.

Como se menciona en un comentario, normalmente desea un objeto primitivo largo (minúscula-largo) no encasillado largo (mayúscula-L largo) para el tipo de variable unixTime.

long unixTime = System.currentTimeMillis()/1000L; 
+3

Considere también el uso de primitivo largo en lugar de autoboxing a Largo, a menos que desee manejar el número como un Objeto (como ponerlo en una Colección), nuevamente evita la creación innecesaria de objetos – Brabster

+0

Si puede evitar usar Fecha por completo, estará mejor de todos modos ... – Varkhan

+0

La marca de tiempo UNIX real se debe denotar usando int, ¿correcto? – Zorayr

166

Java 8 agregó una nueva API para trabajar con fechas y horas. Con Java 8 se puede utilizar

long unixTimestamp = Instant.now().getEpochSecond(); 

Instant.now() devuelve un Instant que representa la hora actual del sistema. Con getEpochSecond() obtienes los segundos de época (tiempo Unix) del Instant.

+17

Esta debería ser la nueva respuesta aceptada. –

+1

Cuál es la diferencia entre 'Instant.now(). GetEpochSecond()', 'new Date(). GetTime()' y 'System.currentTimeMillis()' – SohamC

+1

Una diferencia es que la primera está en segundos, mientras que las últimas dos están en milisegundos. Puede haber o no otros. –