2010-03-09 73 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");