我试图将以下日期时间字符串对象转换为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实例上指定时区来适应.