Сравнить объект Date с отметкой времени в Java

Когда я тестирую этот код:

java.util.Date date = new java.util.Date();
java.util.Date stamp = new java.sql.Timestamp(date.getTime());

assertTrue(date.equals(stamp));
assertTrue(date.compareTo(stamp) == 0);
assertTrue(stamp.compareTo(date) == 0);
assertTrue(stamp.equals(date));

, я буду ожидать истинного, истинного, истинного, ложного. Из-за этого:

В javadoc для java.sql.Отметка времени, в нем говорится:

Примечание. Этот тип представляет собой смесь java.util.Date и отдельного значение наносекунд. Только целые секунды сохраняются в Компонент java.util.Date. Дробные секунды - нано - равны отдельный. Метод Timestamp.equals (Object) никогда не возвращает значение true, если передал значение типа java.util.Date, поскольку компонент nanos объекта дата неизвестна. В результате метод Timestamp.equals (Object) становится не симметричен относительно java.util.Date.equals (Object) метод. Кроме того, метод хэш-кода использует базовый java.util.Date реализации и, следовательно, не включает в себя нано вычисление.

Из-за различий между классом Timestamp и java.util.Date, упомянутый выше, рекомендуется, чтобы код не просматривать значения отметок времени в общем как экземпляр java.util.Date. Отношение наследования между отметкой времени и java.util.Date на самом деле означает наследование реализации, а не наследование типов.

Но вместо этого я получу истину, ложь, истину, ложь. Есть идеи?

РЕДАКТИРОВАТЬ: Эта проблема возникает, когда я проверял две даты с помощью метода equals, но один из объектов Date поступает из класса Hibernate, и при отладке я вижу, что объект содержит TimeStamp. Итак, метод equals оценивается как false, тогда я обнаружил следующее: http://mattfleming.com/node/141

Но когда я пробую код, я получаю разные результаты ... если я не могу использовать ни то, ни другое equals и compareTo, что я должен использовать, чтобы проверить, совпадают ли 2 даты?!?!

28
задан Torres 19 January 2012 в 16:57
поделиться