2010-03-09 3 views
1

У меня есть вопрос о классе SimpleDateFormat и методе CompareTo в java.util.Date в: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)); 

Результат:

Исходная дата: пн 25 января 15:43:23 CET 2010 отформатированный дата: 2010.jan.25 3:43:23 868 originalDate CompareTo parsedDate: 1

Почему я получаю всегда «1»? Почему исходная дата больше, чем синтаксическая дата?

ответ

4

Я думаю, что это проблема, связанная с 24h, ваша первоначальная дата это 15, так 3PM, в то время как ваш разобран один находится в 12 формате часов, это потому, что вы использовали ч спецификатор формата вместо H спецификатор формата. Затем ваш час превращается в неправильную строку, поэтому вы теряете точность, потому что при анализе назад 03 считается 3AM. Попробуйте с:

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

Или использовать a, спецификатор AM/PM, –

+0

Я только что попробовал код, он работает с ** HH **, так что это была проблема. Конечно, как было предложено, если вам это нужно в 12-часовом формате, вы можете использовать спецификатор AM/PM вместо ** HH ** – Jack

+0

Да, вы правы! Большое спасибо! – Bob

1

Это работает, если вы добавите AM/PM маркер - a

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

Если вы хотите, чтобы просто сравнить даты, возможно, с помощью GetTime() для сравнения двух значений будет лучшая идея ...