如果我正在运行unix命令
echo 1378223625 | xargs -L 1 -I '{}' date -d "@{}" "+%d-%m-%Y-%H-%M %Z"
结果为03-09-2013-17-53 CEST
如果我从java运行
public class DateExperiment {
public static void main(String[] args) {
DateFormat df = new SimpleDateFormat("dd-MM-yyyy-H-m z");
System.out.println(df.format(1378223625) );
}
}
我的结果是16-01-1970-23-50 CET
unix命令给出了正确的结果,但是java给了我错误的结果。
有人可以解释为什么会出现这种差异吗?这是什么错误?
答案 0 :(得分:3)
如果您使用数值作为SimpleDateFormat#format(..)
的参数,则使用Date
constructor which expects a long
。那个构造函数
分配Date对象并初始化它以表示指定的对象 自标准基准时间以来称为“。”的毫秒数 时代“,即1970年1月1日,格林尼治标准时间00:00:00。
您提供的值代表
16-01-1970-23-50 CET
这里的问题是你有秒,而不是毫秒。
你想要
System.out.println(df.format(1378223625000L));
答案 1 :(得分:2)
Unix为你提供了自纪元以来几秒钟的时间,Java需要几毫秒。如果我乘以1000,我得到你的预期输出。
System.out.println(df.format(1378223625*1000L));
输出
03-09-2013-11-53 EDT