-1

我的代码:

 SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
 Date date = new Date();

System.out.println(sdf.format(date));
System.out.println(sdf.format(sdf.parse(sdf.format(date))));

我得到这个输出:

2013-02-08 15:48:37
2013-12-30 15:48:37

预期输出:

2013-02-08 15:48:37
2013-02-08 15:48:37

查看日期的日期和月份

4

4 回答 4

1

问题来自“解析”方法

==> "从给定字符串的开头解析文本以生成日期。该方法可能不会使用给定字符串的整个文本。"

The method may not use the entire text of the given string.

我已经运行了您的代码并得到以下信息:

System.out.println(sdf.format(date));
System.out.println(sdf.parse(sdf.format(date)));
System.out.println(sdf.format(sdf.parse(sdf.format(date))));

结果 :

2013-02-08 14:54:39
Mon Dec 31 14:54:39 CET 2012
2013-12-31 14:54:39

正如您所看到的,解析函数正确地转换了时间,而不是日期本身。我认为它不打算以这种方式使用,因此会产生奇怪的结果。

但是,这是我第一次注意到这一点,所以我将无法提供更多细节:)

于 2013-02-08T13:58:00.613 回答
1

为了简单起见,让我们使用一个基本的测试用例:

String date = "2013-02-08 15:48:37";
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
System.out.println(sdf.parse(date));

// Output: Mon Dec 31 15:48:37 CET 2012

根据SimpleDateFormat Javadoc,格式说明符Y用于表示“周年”。“年”的正确格式说明符是y- 有了这个,我们得到正确的输出:

sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.parse(date));

// Output: Fri Feb 08 15:48:37 CET 2013
于 2013-02-08T16:38:19.137 回答
0

我无法重现这个:

public static void main(String[] args) {
    // TODO code application logic here
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = new Date();

    Logger log = Logger.getLogger("InfoLogging");

    log.info(sdf.format(date));
    try {
        log.info(sdf.format(sdf.parse(sdf.format(date))));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

给出输出:

Feb 8, 2013 2:57:09 PM javaapplication2.JavaApplication2 main
INFO: 2013-02-08 14:57:08
Feb 8, 2013 2:57:09 PM javaapplication2.JavaApplication2 main
INFO: 2013-02-08 14:57:08

您使用的是哪种记录器?

于 2013-02-08T13:58:41.900 回答
0

假设这log是某种记录器,他们的标准做法是打印出每一行的时间日期和日志级别。如果需要,它可以更容易地从日志中调试,

于 2013-02-08T13:47:23.280 回答