2012-03-29 29 views
1

我試着去unixtime轉換爲日期,但結果即時得到是錯誤的: 例如我有這個unixtime:1354312800 accurding這個網站:
enter link description here
結果是:
星期五,2012年11月30 22點00分00秒GMT的Java轉換unixtime到目前爲止,給人錯誤的結果

但是當我做:

long timestamp = 1354312800; 
java.util.Date time=new java.util.Date((long)timestamp*1000); 
int d = time.getDay(); 
int m = time.getMonth(); 

即時得到: d = 6 < <這是錯誤的應該是30
和M - 11

+0

相差修正原來的職位根據答案,你基本上:-) – aioobe 2012-03-29 09:27:48

回答

2

的方法Date.getDay()給的周當天(0 =星期日,...,6 =星期六)。

將其更改爲Date.getDate(),您將得到30作爲結果。


一些側面說明:

  • Date類是非常過時。改爲使用Calendar,或者更好使用Joda time library

  • 你的轉換很有趣。 (long)timestamp*1000timestamp轉換爲長整型值(其中已經是一個長整型值),然後自動將1000擴大爲長整型值以執行乘法。

    我會完全忽略轉換(long),如果您想明確說明這些因素是長整數值,請改用1000L,這是一個長文字。

+0

無效我們的答案(回滾)固定的,但仍這是錯誤的 – user63898 2012-03-29 09:24:32

+0

不,它不是:http://ideone.com/O7rAJ – aioobe 2012-03-29 09:26:53

+0

它怎麼可能,結果是1我的電腦不是30。 mybe與時區有關嗎? – user63898 2012-03-29 09:34:57

4

您已經爲getDate()getDay()

getDay的Javadoc:

返回該日期是星期幾。返回的值(0 =星期日,1 =星期一,2 =星期二,3 =星期三,4 =星期四,5 =星期五,6 =星期六)表示包含該時間點或以該時間點開始的星期幾日期對象,如本地時區中所解釋的。

因此,只要使用getDate()代替getDay()

欲瞭解更多信息,請檢查的javadoc:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html


如果你的時間仍從Unix的時候,你試過不同,你可能活不在GMT時間,所以你需要找出相應的時區的日期:

SimpleDateFormat df = new SimpleDateFormat(); 
df.setTimeZone(TimeZone.getTimeZone("GMT")); 
System.out.println(df.format(time)); 

這應該給你預期的輸出,即使當地tiemzone從GMT

+0

我修復了原來的帖子,它仍然錯誤給我1而不是30 – user63898 2012-03-29 09:23:27

+0

我已經更新了我的答案,以包含您所在時區的具體信息。 – devsnd 2012-03-29 09:54:01

+1

時區如何影響哪個日期'1354312800 * 1000'對應於? – aioobe 2012-03-29 10:01:18

相關問題