2010-03-09 26 views
1

我有一個大約的SimpleDateFormat類和java.util.Date的compareTo方法問題:的Java的SimpleDateFormat和的compareTo

我構建一個Date對象,然後我的格式,我終於解析格式化字符串和比較到原始日期。

DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS"); 
Date originalDate = new Date(); 

String s = df.format(originalDate); 
Date parsedDate = df.parse(s); 

System.out.println("Original date: " + originalDate); 
System.out.println("Formatted date: " + s); 
System.out.println("originalDate compareTo parsedDate: " + originalDate.compareTo(parsedDate)); 

結果:

原始日期:星期一1月25日15點43分23秒CET 2010格式的日期:2010.jan.25 3點43分23秒868 originalDate的compareTo parsedDate: 1

爲什麼我總是「1」?爲什麼原始日期比解析日期更嚴格?

回答

4

我認爲這是一個24小時的相關問題,您這是15原來的日期,所以下午3時,而你解析一個是12小時制,這是因爲你用^h格式說明,而不是^h格式說明。你的小時然後變成錯誤的字符串,所以你失去了精度,因爲當解析回03被認爲是3AM。試着用:

DateFormat df = new SimpleDateFormat("yyyy.MMMdd HH:mm:ss SSS"); 
+0

或者使用a,AM/PM說明符, – 2010-03-09 15:09:48

+0

我剛剛嘗試了代碼,它與** HH **一起工作,所以這就是問題所在。當然如所暗示的,如果你需要12小時的格式,你可以使用AM/PM說明符而不是** HH ** – Jack 2010-03-09 15:11:16

+0

是的,你說得對!非常感謝你! – Bob 2010-03-09 15:11:34

1

它的工作原理,如果你添加的AM/PM標記 - 如果你想僅僅比較的日期,可能使用的getTime()兩個值進行比較會是a

DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS a");