我正在尝试将以下日期时间字符串对象转换为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
实例上指定时区来进行调整。