需要java日期比较帮助

需要java日期比较帮助,java,datetime,Java,Datetime,我想比较两个日期。这是我的日期比较代码 Date dbLastModified = getBulletinBarMessageLastModified(); Date bulletinBarMessageLastModified = bulletinBarForm.getLastModified(); if (dbLastModified.after(bulletinBarMessageLastModified)){ throw new ReportingManagerOptimist

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

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;
}

我不明白为什么即使某些日期看起来相等(比如这两个),我的代码也会抛出
ReportingManagerOptimisticLockingException
异常,这意味着一个在另一个之后。我对日期比较的理解是错误的吗?

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

但是
java.util.Date
只处理毫秒

您可以阅读以下内容:

之后

公共布尔值(日期和时间)

否则。 抛出: NullPointerException-如果when为null

现在,它要么是一个
Java
bug,要么是
dblastmedited
bulletinbarmessagelastmedited
之后几纳秒

如果以下内容为假:

dbLastModified.after(dbLastModified)

那么这可能不是Java的bug,但第二个日期恰好在第一个日期之后几纳秒。

日期存储为毫秒,因此它们在毫秒内可能实际上是不同的,即使它们看起来相同。时间戳不能作为版本数据类型可靠地工作。首先,客户机上的时间戳分辨率,DB OS和DB本身可能不同。即使有相当高的分辨率,也会出现两个更新同时发生并且没有被检测为不同版本的情况。是的。你们是对的。谢谢……第一天:2014-04-02T08:35:12.000+1100……第二天:2014-04-02T08:35:12.015+1100不太可能
after
处理日期,因此它只比较毫秒。看起来有毫秒的差异,但因为OP正在将日期打印到最接近的秒,所以不会显示。
时间戳中的纳秒数与此无关。
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
dbLastModified.after(dbLastModified)