Java将日期转换为纪元值会产生错误输出

我试图将以下日期时间字符串对象转换为unix epoch时间戳值.但是,当我运行该程序时,我注意到它生成了一个1404461110000的纪元值,当我检查我的ubuntu unix机器是在8月7日星期三18:06:40然而实际上我正在通过2014年7月4日04-07: 05:10.我的ubuntu机器上有美国/多伦多的时区,但我觉得这不重要吗?

Java代码:

            long epoch = 0;
            String str = "2014-07-04 04:05:10";   // UTC

            DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date datenew = df.parse(str);
            epoch = datenew.getTime();

            System.out.println(epoch); // prints 1404461110000

Ubuntu Linux 14.04

date -d@1404461110000

显示= 8月7日星期三18:06:40 EDT 46475

解决方法:

问题是你在Java中调用getTime()时没有处理unix timestamp. Unix时间戳以自纪元以​​来的秒数表示,而您从Java获得的值是自epoch(1970年1月1日)以来的毫秒数,因此存在差异.

它必须是:

epoch = datenew.getTime() / 1000;

这应该会让你至少接近10000年.如果在此之后仍然看到差异,则它与时区相关,并且可以通过在DateFormat实例上指定时区来适应.

上一篇:TensorFlow实战房价预测


下一篇:论文解析 -- LeanStore: In-Memory Data Management Beyond Main Memory