# Java 日期类型比较没有返回正确的结果

**URL:** <https://www.isharkfly.com/t/java/13833>\
**Category:** 程序语言\
**Created:** [December 20, 2021, 4:56pm UTC](https://www.isharkfly.com/t/java/13833 "2021-12-20T16:56:14Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [December 20, 2021, 4:56pm UTC](https://www.isharkfly.com/t/java/13833/1 "2021-12-20T16:56:14Z")

</div>

最近在数据库处理的时候发现日期对比的时候没有返回正确的结果。

但是保存的时间实际上是相同的。

代码如下：

```auto
 if (!mlsPhoto.getDateUpdate().equals(photo.getDateUpdate())) {
}

```

因为这里使用了 equals 方法。

## 问题解决

经过 Debug 后，这 2 个日期的纳秒数是不同的，查看下对象如下。

![date_time_equals_01](https://www.isharkfly.com/images/transparent.png)

我们会发现其中一个对象有纳秒，一个对象没有。

但是 fastTime 是相同的。

如果使用 equals 那么这个方法比较的是毫秒，所以是不相等的。

因为多了一个 0。

![date_time_equals_02](https://www.isharkfly.com/images/transparent.png)

如上图显示的毫秒比较，因此这里不能使用这个比较方法。

在这里，我们转换成了 JODA 对象，然后再对比，通常能够削减精度。

```auto
                DateTime dbDateTime = new DateTime(mlsPhoto.getDateUpdate());
                DateTime mlsDateTime = new DateTime(photo.getDateUpdate());

if (!dbDateTime.isEqual(mlsDateTime)) {
}

```

说白了这个问题就是精度的问题。
