2012-05-10 122 views
2

我有一個時間戳,我想將其轉換爲日期。我試過這個時間戳:1336425840.這應該是星期一,2012年5月7日21:24:00 GMT,其中GMT是模擬器應該設置的時區。我嘗試這樣做:在Android模擬器中將unix時間戳轉換爲日期

final Calendar c = Calendar.getInstance(); 
c.setTimeInMillis(1336425840*1000); 
Date d = c.getTime(); 
Log.i("MyTag", "Hours: " + d.getHours()); 

結果是:時間:23

所以它看起來像返回的日期是根據GMT + 2,這是時區我的系統設置來計算。我期望g.hetHours()返回21,因爲仿真器的時區似乎設置爲GMT。

此外,該時間戳是使用mktime讀取C中的實際日期的結果,這似乎會返回正確的時間戳。但Java似乎指的是不同的時區。我做錯了什麼?爲什麼不是星期一,2012年5月7日21:24:00 GMT返回?

+0

檢查了這一點的http:/ /stackoverflow.com/questions/2818086/android-get-current-utc-time – moujib

回答

5

我很確定1336425840*1000會給你一個超出int的常規範圍的值。實際上,如果您打印Calendar對象的完整日期,則會看到它顯示Thu Jan 08 23:56:50 GMT 1970,這說明了您看到的23小時。

更改乘法:(注意L末)

c.setTimeInMillis(1336425840 * 1000L); 

//編輯:容易確認:

System.out.println((1336425840 * 1000L > Integer.MAX_VALUE)); 

:)

+0

是的,我只是自己找到了它。我注意到了1970年:-D謝謝! –

2

您應該使用DateFormat對象,然後使用setTimeZone()設置時區。

+0

是的,這是工作。但爲什麼我報告的代碼不是? –

+0

因爲默認情況下它使用您正在使用的計算機的當前時區。你需要告訴它使用GMT來代替。 –

+0

即使沒有指定時區,它也在工作。 –

相關問題