2012-08-20 11 views
24

Al intentar convertir un timstamp de Unix, desde una base de datos, a una cadena en un formato de fecha.Conversión de marca de tiempo de Unix en Cadena con tiempo Joda

int _startTS = evtResult.getInt("start"); //outputs 1345867200 
Long _sLong = new Long(_startTS); //outputs 1345867200 
//I've also tried: Long _sLong = new Long(_startTS*1000); //outputs 1542436352 
DateTime _startDate = new DateTime(_sLong); //outputs 1970-01-16T08:51:07.200-05:00 

La marca de tiempo es para: Sat, 25 Aug 2012. No tengo idea de por qué 1970 siempre es el resultado, así que con suerte alguien puede ver un error estúpido que estoy cometiendo.

Respuesta

51

tiempo Unix es en cuestión de segundos, el tiempo de Java es milisegundos

Tendrá que múltiples por 1000

DateTime _startDate = new DateTime(_sLong * 1000L); 

Es posible que desee comprobar esto answer cabo

+0

¡Funciona muy bien! – locrizak

+4

Editado. Deberías usar una 'L' mayúscula para los largos. Mucho más legible –

3

Al hacer esto : _startTS*1000, Java supone que desea un int porque _startTS es un int (por eso el valor es 1542436352). Prueba a transmitir como mucho en primer lugar:

Long _sLong = new Long(((long)_startTS)*1000); 
5

Unix marca de tiempo es un número de SEGUNDOS desde 1970-01-01 00:00:00.

DateTime(long instant) constructor necesita el número de MILLISECONDS.

long _startTS = ((long) evtResult.getInt("start")) * 1000; 
DateTime _startDate = new DateTime(_startTS); 

EDIT: o utilizar el método getLong (..) en su evtResult para evitar el reparto de largo.

+1

Sé que ... traté de multiplicar por 1000, pero la marca de tiempo terminó siendo 2018. Necesitaba '' 1000l' y everythign funciona muy bien. – locrizak

Cuestiones relacionadas