1

我有一个关于 SimpleDateFormat 类和 java.util.Date 的 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));

结果:

原始日期:Mon Jan 25 15:43:23 CET 2010 格式化日期:2010.jan.25 03:43:23 868 originalDate compareTo parseTo parsedDate: 1

为什么我总是得到“1”?为什么原始日期比解析日期更重要?

4

3 回答 3

4

我认为这是一个与 24 小时相关的问题,您的原始日期是 15,所以下午 3 点,而您解析的日期是 12 小时格式,这是因为您使用了h格式说明符而不是H格式说明符。你的小时然后变成了错误的字符串,所以你失去了精度,因为当解析回来时03被认为是 3AM。尝试:

DateFormat df = new SimpleDateFormat("yyyy.MMMdd HH:mm:ss SSS");
于 2010-03-09T15:07:47.420 回答
1

如果您添加 Am/pm 标记,它会起作用 -a

DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS a");
于 2010-03-09T15:09:46.740 回答
1

如果您只想比较日期,也许使用 getTime() 比较两个值会更好......

于 2010-03-09T15:18:58.347 回答