2012-08-20 15 views
24

Bir Unix timstamp dosyasını bir veritabanından bir tarih biçiminde bir String'e dönüştürmeye çalışırken.Unix zaman damgasının Joda Time ile String'e dönüştürülmesi

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 

damgası içindir: Sat, 25 Aug 2012. Neden 1970'in her zaman çıktı olduğu konusunda hiçbir fikrim yok, umarım birisi aptalca bir hata yapabilir.

cevap

51

Unix zaman Java zaman Sen kontrol etmek isteyebilir 1000

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

tarafından birden çok gerekir milisaniye

olduğu saniye cinsinden olan bu answer

+0

Harika güzel çalışıyor! – locrizak

+4

Düzenlendi. Uzunlar için bir 'L' kullanmalısınız. Çok daha okunabilir. –

3

dışarı Bunu yaptığınızda : _startTS*1000, Java bir int istediğinizi varsayar, çünkü _startTS bir int'dir (bu nedenle değer 1542436352'dir). Uzun birinci olarak döküm deneyin:

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

Unix zaman damgası SANİYE 1970-01-01 00:00:00 beri bir sayıdır.

DateTime(long instant) yapıcı, MILLISECONDS numaralı telefon numarasını gerektirir.

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

DÜZENLEME: veya uzun için evtResult önlemek için döküm üzerine getLong (..) yöntemini kullanın.

+1

Bunu biliyorum .. 1000 ile çarpmayı denedim ama zaman damgası aslında 2018'dir. '* 1000l' ye ihtiyacım vardı ve her şey harika çalışıyor. – locrizak

İlgili konular