【问题标题】:SimpleDateFormat format wrong valuesSimpleDateFormat 格式错误的值
【发布时间】:2010-12-27 17:53:02
【问题描述】:

以下代码:

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

通过SimpleDateFormat.getDateInstance(); 使用默认DateFormat 将这些日期打印为16-Jan-1970。怎么回事?

【问题讨论】:

  • 愚蠢的错误。感谢大家的所有答案。你们都在同一分钟内回答,所以不知道该将正确答案授予谁。

标签: java date-format


【解决方案1】:

您正在混合毫秒和秒。 1293253200 确实是 2010 年 1 月 16 日。你必须乘以 1000 才能得到你想要的日期:

Date date = new Date(1293253200L*1000L);
Sat Dec 25 06:00:00 CET 2010

【讨论】:

    【解决方案2】:

    请查看Date(long) 构造函数的文档:它以毫秒为单位,而不是秒。
    new Date(1293253200000l) 应该可以。

    PS。许多 IDE 提供内联文档,因此您甚至不必打开浏览器。

    【讨论】:

      【解决方案3】:

      Date 构造函数预计自纪元以来的毫秒数,但您传递的数字是自纪元以来的秒数。将其乘以 1,000,您将得到正确的日期。

      【讨论】:

        【解决方案4】:

        正如 mhaller 所指出的,在这种情况下,您确实弄错了毫秒和秒。

        Date 的重载构造函数将其参数作为long。以下来自 java-doc 页面的 sn-p。

        参数:

        日期 - 自格林威治标准时间 1970 年 1 月 1 日 00:00:00 起的毫秒数不超过 8099 年的毫秒表示。一个负数 表示 1970 年 1 月 1 日 00:00:00 之前的毫秒数 格林威治标准时间。

        【讨论】:

          猜你喜欢
          • 2018-06-23
          • 1970-01-01
          • 1970-01-01
          • 2011-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-09
          相关资源
          最近更新 更多