unix日期命令和java SimpleDataFormat不一致

unix日期命令和java SimpleDataFormat不一致,java,unix,Java,Unix,如果我正在运行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-M

如果我正在运行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给出了错误的结果


有人能解释我为什么会有这种差异吗?错误是什么?

如果使用数值作为
SimpleDataFormat#format(..)
的参数,它将使用。那个构造器

分配日期对象并将其初始化以表示指定的日期 自标准基准时间(称为“基准时间”)起的毫秒数 “纪元”,即1970年1月1日00:00:00 GMT

您提供的值表示

16-01-1970-23-50 CET
这里的问题是你有秒,而不是毫秒

你会想要的

System.out.println(df.format(1378223625000L));

如果使用数值作为
SimpleDataFormat#format(..)
的参数,它将使用。那个构造器

分配日期对象并将其初始化以表示指定的日期 自标准基准时间(称为“基准时间”)起的毫秒数 “纪元”,即1970年1月1日00:00:00 GMT

您提供的值表示

16-01-1970-23-50 CET
这里的问题是你有秒,而不是毫秒

你会想要的

System.out.println(df.format(1378223625000L));

Unix提供的时间以秒为单位,而Java提供的是毫秒。如果我乘以1000,我就得到你的预期输出

System.out.println(df.format(1378223625*1000L));
输出

03-09-2013-11-53 EDT

Unix提供的时间以秒为单位,而Java提供的是毫秒。如果我乘以1000,我就得到你的预期输出

System.out.println(df.format(1378223625*1000L));
输出

03-09-2013-11-53 EDT

但是java给了我错误的结果
。不,您的期望是错误的。另一个很好的例子说明了为什么不应该使用count-since来处理日期时间值。
但是java给了我错误的结果。
。不,你的期望是错误的。另一个很好的例子说明了为什么不应该使用count-since来处理日期时间值。