2012-03-10 115 views
1

我需要將一些紀元時間戳轉換爲實際日期,並使用了我在堆棧溢出中發現的一些方法,但他們給出了錯誤的答案。Java - 將Unix紀元時間轉換爲日期

作爲一個實例,一個日期是「129732384262470907」,在信號出現時間,這是「星期一,01月20日6081 5點24分22秒GMT」使用http://www.epochconverter.com/

然而,我的代碼生成:「星期三14年12月24日:54:05 CST 19179225"

String epochString = token.substring(0, comma); 
    long epoch = Long.parseLong(epochString); 
    Date logdate = new Date(epoch * 1000); 
    BufferedWriter timewrite = new BufferedWriter(new FileWriter(tempfile, true)); 
    timewrite.write(logdate); 
    timewrite.flush(); 
    timewrite.close(); 

最初的時間戳以毫秒爲單位,這在我的例子在這裏看到我應該通過1000

繁衍如果我不乘以1000,我得到:「Mon Aug 08 01:14:30 CDT 4113025」

這兩者都是錯誤的。

那麼我在哪裏犯了我的錯誤?

回答

2

129732384262470907實際上是微秒從紀元,如果它的意思是6081,所以您可以通過1000需要鴻溝如果這是真實的輸入。

注意epochconverter.com甚至不處理這個價值 - 它不僅可以讓你進入129732384262470它,然後將其視作毫秒以來的時代。

如果您的數據是以來,您需要乘以1000。基本上所有你需要知道的是,Java期待自時代以來的毫秒;其餘的應該是一帆風順的,假設你知道你的輸入數據實際上意味着什麼。

如果您可以提供您的真實數據,以及它代表什麼意思,它可能會很容易解決您的問題。

+0

而你真棒! – 2012-03-10 18:17:02

+0

感謝關於epochconveter.com的提示,我從來沒有想過我自己。正如你可以從我的帖子中看到的,在你的兩個答案之間,我能夠弄明白。 – 2012-03-10 20:41:36

0

如果您仔細觀察,epochconverter.com會截斷該號碼,因爲它對於輸入字段來說太長。

我建議您打印System.currentMillis()的當前值,以查看「當前」基於時代的時間戳具有的近似範圍,並重新縮放要匹配的輸入數字。我認爲你可能必須除以1000.

事實上,如果將它們相除,如果你除以10,000,則得到1297323842624,它在2011年出現日期。因此,根本不清楚哪些單位你給的號碼是。

+0

而你真棒!這一改變使其正常工作。再次感謝,你是正確的epochconverter.com給出了一個不正確的值,實時是「Sun Jan 19 23:24:22 CST 6081」 – 2012-03-10 18:17:18

+0

真的嗎?你在期待6081年? – dty 2012-03-10 19:34:22

+0

當然,我是一個時間旅行者。我只需要回到6081,可用的原始系統非常令人沮喪。 [/笑話]對不起,貼錯了,正確的是這樣的:「Thu Feb 10 01:44:02 CST 2011」我不得不除以100,000 – 2012-03-10 20:37:43

相關問題