2012-03-10 106 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

相关问题