以下代码:
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd");
System.out.println(sdf.format(new Date(1293253200))); // 12/25/2010 05:00 GMT
System.out.println(sdf.format(new Date(1293339600))); // 12/26/2010 05:00 GMT
System.out.println(sdf.format(new Date(1293426000))); // 12/27/2010 05:00 GMT
打印:
01/16
01/16
01/16
通过DateFormat
使用默认SimpleDateFormat.getDateInstance();
将这些日期打印为16-Jan-1970
。发生了什么事?
答案 0 :(得分:8)
您正在混合毫秒和秒。 1293253200确实是2010年1月16日。您必须乘以1000才能得到您想要的日期:
Date date = new Date(1293253200L*1000L);
Sat Dec 25 06:00:00 CET 2010
答案 1 :(得分:4)
请检查Date(long)
构造函数的文档:它取值以毫秒为单位,而不是秒
new Date(1293253200000l)
应该做得很好。
PS。许多IDE提供内联文档,因此您甚至不必打开浏览器。
答案 2 :(得分:2)
Date
构造函数需要自纪元以来的毫秒数,但您传递的数字是自纪元以来的秒数。将它乘以1,000,你就会得到正确的日期。
答案 3 :(得分:0)
正如mhaller指出的那样,在这种情况下,你确实误认为毫秒和秒。
Date
的重载构造函数将其参数设为long
。来自java-doc页面的以下片段。
<强>参数:强>
日期 - 从1970年1月1日起,格林威治标准时间00:00:00毫秒不超过 8099年的毫秒表示。负数 表示1970年1月1日00:00:00之前的毫秒数 GMT。