web-dev-qa-db-fra.com

Conversion de l'horodatage Unix en chaîne avec Joda Time

Lorsque vous essayez de convertir un horodatage Unix, à partir d'une base de données, en une chaîne au format date.

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

L'horodatage est pour: Sat, 25 Aug 2012. Je ne sais pas pourquoi 1970 est toujours la sortie, donc j'espère que quelqu'un peut voir une erreur stupide que je fais.

28
locrizak

Le temps Unix est en secondes, Java le temps est en millisecondes

Vous devrez le multiplier par 1000

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

Vous voudrez peut-être vérifier cela réponse out

58
MadProgrammer

L'horodatage Unix est un nombre de SECONDES depuis 1970-01-01 00:00:00.

DateTime(long instant) le constructeur a besoin d'un nombre de MILLISECONDES .

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

EDIT: ou utilisez la méthode getLong (..) sur votre evtResult pour éviter un cast trop long.

5
Strelok

Lorsque vous procédez ainsi: _startTS*1000, Java suppose que vous voulez un int car _startTS est un entier (c'est pourquoi la valeur est 1542436352). Essayez de le lancer aussi longtemps:

Long _sLong = new Long(((long)_startTS)*1000);
3
Jon Lin