我正在尝试比较两个日期。这是我的日期比较代码...
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()
返回相同的输出,实际上也存在纳米差异。
但java.util.Date
只处理毫秒。
这里
您可以阅读以下内容:
后
公共布尔值之后(日期时间)
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 - 如果 when 为 null。
现在,它要么是一个Java
错误,要么dbLastModified
真的是在几纳秒内bulletinBarMessageLastModified
之后。
如果false
以下内容:
dbLastModified.after(dbLastModified)
那么它可能不是一个Java
错误,但碰巧第二个日期是在第一个日期之后,有几纳秒。