Я пытаюсь сравнить две даты. Вот мой код сравнения даты...
Date dbLastModified = getBulletinBarMessageLastModified();
Date bulletinBarMessageLastModified = bulletinBarForm.getLastModified();
if (dbLastModified.after(bulletinBarMessageLastModified)){
throw new ReportingManagerOptimisticLockingException(optimisticLockingMessage);
}
public Date getBulletinBarMessageLastModified() {
Timestamp lastModifiedTimestamp = getJdbcTemplate().queryForObject(BULLETIN_BAR_MSG_LAST_MODIFIED_SQL,Timestamp.class);
Date lastModifiedDate = new Date(lastModifiedTimestamp.getTime());
return lastModifiedDate;
}
...
dbLastModified - Tue Apr 01 22:29:04 EST 2014
bulletinBarMessageLastModified - Tue Apr 01 22:29:04 EST 2014
Я смущен тем, почему даже когда некоторые даты кажутся равными (например, эти два), почему мой код бросает исключение ReportingManagerOptimisticLockingException
, подразумевая, что он один за другим. Является ли мое понимание сопоставлений даты неправильным?
Timestamp.getTime()
рассматривает наносекунды. Таким образом, даже toString()
возвращает один и тот же результат, на самом деле существует разница в nano.
Но java.util.Date
только с миллисекундами.
after
сделок с датами, поэтому он сравнивает только миллисекунды. Похоже, есть разница в миллисекундах, но поскольку OP печатает даты с точностью до секунды, это не будет отображаться. TimeStamp
в TimeStamp
имеют к этому никакого отношения.
getDateDiff(date1,date2,TimeUnit.MINUTES);
вы можете прочитать следующее:
после
public boolean after (Дата когда)
Tests if this date is after the specified date. Parameters: when - a date. Returns: true if and only if the instant represented by this Date object is strictly later than the instant represented by when; false
в противном случае. Броски: NullPointerException - если значение равно null.
Теперь это либо ошибка Java
либо dbLastModified
действительно после bulletinBarMessageLastModified
с несколькими наносекундами.
Если значение false
:
dbLastModified.after(dbLastModified)
то это, вероятно, не ошибка Java
, но бывает так, что вторая дата после первого с несколькими наносекундами.