Вопрос

У меня вопрос о классе 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() для сравнения двух значений...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top