我需要将一些纪元时间戳转换为实际日期并使用我在堆栈溢出时发现的一些方法,但它们给出了错误的答案。
例如,一个日期是“129732384262470907”,在纪元时间,即“Mon,20 Jan 6081 05:24:22 GMT”使用http://www.epochconverter.com/
但是,我的代码生成:“Wed Dec 24 14: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”
这两个都是错误的。
那我在哪里犯了错误?
答案 0 :(得分:2)
129732384262470907实际上是微秒自纪元以来它是6081,所以你需要除去 1000,如果这是真正的输入。
请注意,epochconverter.com
甚至不会处理该值 - 它只允许您输入129732384262470
,然后从纪元开始将其视为毫秒。
如果您的数据自纪元以来秒,则需要乘以1000。基本上你需要知道的是Java预计自纪元以来毫秒;假设您知道您的输入数据实际意味着什么,其余的应该是一帆风顺。
如果您可以提供真实的数据及其代表的含义,那么解决问题可能很容易。
答案 1 :(得分:0)
如果仔细观察,epochconverter.com会截断该数字,因为它对于输入字段来说太长了。
我建议您打印System.currentMillis()
的当前值,以查看“当前”基于纪元的时间戳具有的近似范围,并重新调整输入数字以进行匹配。我想你可能要除以1000。
事实上,仔细观察,如果你除以10,000,就会得到1297323842624,这是2011年的一个日期。所以你所提供的数字单位是什么单位并不清楚。