需要java日期比较帮助

时间:2014-04-01 11:33:52

标签: java datetime

我想比较两个日期。这是我的日期比较代码...

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异常,暗示一个之后另一个。我对日期比较的理解是错误的吗?

2 个答案:

答案 0 :(得分:2)

Timestamp.getTime()也会考虑 纳秒 。 因此即使toString()返回相同的输出,实际上也存在 nano 差异。

java.util.Date仅处理 毫秒

答案 1 :(得分:1)

Here

您可以阅读以下内容:

  

     

公共布尔值(日期时间)

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错误,但第二个日期是在第一个日期之后,只有几纳秒。