unix日期命令和java SimpleDataFormat不一致
如果我正在运行unix命令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
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来处理日期时间值。