2013-02-08 38 views
-1

我的代码:java日期类 - 为什么我在这些行中有其他日期输出?

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 

看看日期

+0

您正在使用的输出与日期,时间标准的日志格式的日志库和日志级别您使用。如果你想要一个正常的输出,使用System.out.println或类似的东西。 – syrion 2013-02-08 13:47:29

+0

因为log.info记录日期和日志记录类型。 – 2013-02-08 13:47:32

+3

我猜OP是在寻找原因,为什么日期改变时做双格式,而不是关于输出中的其他组件。 – sundar 2013-02-08 13:49:48

回答

0

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

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 

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

不过,这是我第一次注意到这一点,所以我不能透露更多的细节:)

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 

您使用哪种记录仪?

+0

请注意,OP使用“YYYY”(表示“Week Year”,而不是“Year”,根据http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)与这个,我可以重现行为 – 2013-02-08 14:00:09

+1

好吧OP使用1.7。我有1.6,所以YYYY抛出异常。 – user000001 2013-02-08 14:06:16

+0

啊正确 - 星期几功能似乎是1.7中的新功能 – 2013-02-08 14:07:51

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 
相关问题