2012-08-20 213 views
24

當試圖將Unix timstamp從數據庫轉換爲日期格式的字符串時。將Unix時間戳轉換爲帶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 

時間戳記爲:Sat, 25 Aug 2012。我不知道爲什麼1970年總是輸出,所以希望有人能看到我犯的一個愚蠢的錯誤。

回答

51

Unix時間是以秒爲單位,Java的時間是毫秒

你需要多個它由1000

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

你可能要檢查這個answer

+0

偉大的作品漂亮! – locrizak 2012-08-20 01:39:35

+4

已編輯。您應該使用大寫'L'來表示多頭。更多可讀性。 – 2013-03-12 18:30:52

3

當你這樣做:_startTS*1000,Java假設你想要一個int,因爲_startTS是一個int(這就是爲什麼值爲1542436352)。嘗試鑄造它作爲一項長期的第一:

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

Unix的時間戳是一個數字的SECONDS因爲1970-01-01 00:00:00

DateTime(long instant)構造函數需要數字MILLISECONDS

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

編輯:或使用getLong(..)方法對你evtResult,以避免強制轉換爲長。

+1

我知道..我試圖乘以1000,但結果實際上是2018年的時間戳。我需要'* 1000l'和everythign很好。 – locrizak 2012-08-20 15:13:25

相關問題