我正在尝试将以下日期时间字符串对象转换为Unix纪元时间戳值。但是,当我运行程序时,我注意到它生成一个纪元值1404461110000,当我在ubuntu Unix机器上检查时是星期三8月7日18:06:40但是实际上我正在传递2014年7月4日2014年7月4日: 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

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

最佳答案

问题是在Java中调用getTime()时,您没有处理unix timestamp。 Unix时间戳以自该纪元以来的表示,而您从Java中获得的值自epoch以来为毫秒(1970年1月1日),因此有所不同。

它必须是:

epoch = datenew.getTime() / 1000;

这应该使您至少相距10000年。如果之后仍然看到差异,则与时区相关,并且可以通过在DateFormat实例上指定时区来进行调整。

08-25 07:31
查看更多