需要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)