Java SimpleDateFormat и compareTo
-
18-09-2019 - |
Вопрос
У меня вопрос о классе SimpleDateFormat и методе сравнения java.util.Date:
Я создаю объект 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.25 января 03:43:23 868 Исходная дата сравнения Проанализированная дата:1
Почему я всегда получаю "1"?Почему исходная дата более тертая, чем обработанная дата?
Решение
Я думаю, что это проблема, связанная с 24 часами, ваша исходная дата 15, то есть 3 часа дня, в то время как ваша проанализированная дата в формате 12 часов, это потому, что вы использовали h спецификатор формата вместо H спецификатор формата.Ваш час затем превращается в неправильную строку, так что вы теряете точность, потому что при обратном анализе 03
считается, что 3 часа ночи.Попробуйте с:
DateFormat df = new SimpleDateFormat("yyyy.MMMdd HH:mm:ss SSS");
Другие советы
Это работает, если вы добавите маркер Am / pm - a
DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS a");
Если вы хотите просто сравнить даты, возможно, лучшей идеей было бы использовать getTime() для сравнения двух значений...