2012-08-20 8 views
24

Wenn Sie versuchen, einen Unix-Timstamp aus einer Datenbank in einen String in einem Datumsformat zu konvertieren.Konvertieren von Unix-Timestamp in String mit Joda-Zeit

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 

Der Zeitstempel ist für: Sat, 25 Aug 2012. Ich habe keine Ahnung, warum 1970 immer die Ausgabe ist, also hoffentlich kann jemand einen dummen Fehler sehen, den ich mache.

Antwort

51

Unix Zeit ist in Sekunden, Java Zeit ist Millisekunden

Sie werden es von 1000 bis mehrere benötigen

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

Möglicherweise möchten Sie dies überprüfen answer out

+0

Großartig funktioniert schön! – locrizak

+4

Bearbeitet. Sie sollten ein großes 'L' für Longs verwenden. Viel besser lesbar. –

3

Wenn Sie dies tun : _startTS*1000, Java nimmt an, dass Sie einen int wollen, weil _startTS ein int ist (deshalb ist der Wert 1542436352). Versuchen Sie es als eine lange erste Casting:

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

Unix-Zeitstempel eine Reihe von SEKUNDEN ist seit 1970-01-01 00:00:00.

DateTime(long instant) Erbauer braucht Nummer von MILLISECONDS.

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

EDIT: oder benutzen getLong (..) Methode auf Ihrem evtResult den Darstellern zu lange zu vermeiden.

+1

Ich weiß das .. Ich habe versucht, mit 1000 zu multiplizieren, aber der Zeitstempel endete 2018. Ich brauchte die '* 1000l' und alles funktioniert super. – locrizak