2009-04-08 45 views
205

Date.getTime()返回毫秒自1月1日,1970年Unixtime是自1月1日,1970秒我通常不代碼在Java中,但我工作的一些bug修復。我有:獲得「unixtime」在Java中

Date now = new Date();  
Long longTime = new Long(now.getTime()/1000); 
return longTime.intValue(); 

有沒有更好的方式來獲得java的unixtime?

UPDATE

基於約翰·M的建議下,我結束了:

return (int) (System.currentTimeMillis()/1000L); 
+22

既然你將其轉換爲一個int,你已經推出了2038年問題(Y2K相當於用於Unix)。那時Unix時代已經達到了20億美元,並且翻到負值。解決的辦法是轉移到64位Unix。 Java的等價物就是讓它長久。 – 2009-04-30 03:16:45

+1

是的,我意識到這一點。與這個接口連接的代碼需要一個32位int的unixtime。 – 2009-04-30 04:37:28

+123

2038即將推出。 – Pacerier 2012-01-13 10:17:04

回答

385

以免日後對象創建W/System.currentTimeMillis()。除以1000會使你進入Unix時代。

正如評論所說,你通常需要一個基本long(小寫-1長)未裝箱的對象長期(資本-L長)爲unixTime變量的類型。

long unixTime = System.currentTimeMillis()/1000L; 
166

Java 8添加了一個用於處理日期和時間的新API。 與Java 8,您可以使用

long unixTimestamp = Instant.now().getEpochSecond(); 

Instant.now()返回Instant表示當前系統時間。通過getEpochSecond(),您可以從Instant獲得新紀元秒(unix時間)。