2013-02-08 48 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 
相關問題