SimpleDateFormat格式错误的值

时间:2010-12-27 17:53:03

标签: java date-format

以下代码:

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。发生了什么事?

4 个答案:

答案 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。