我想比较两个日期。这是我的日期比较代码...
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
异常,暗示一个之后另一个。我对日期比较的理解是错误的吗?
答案 0 :(得分:2)
Timestamp.getTime()
也会考虑 纳秒 。
因此即使toString()
返回相同的输出,实际上也存在 nano 差异。
但java.util.Date
仅处理 毫秒 。
答案 1 :(得分:1)
您可以阅读以下内容:
后
公共布尔值(日期时间)
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
错误,但第二个日期是在第一个日期之后,只有几纳秒。