gpt4 book ai didi

java - 比较Java中的Date对象

转载 作者:行者123 更新时间:2023-12-03 23:14:56 24 4
gpt4 key购买 nike

我最近在用 equals() 比较两个 Java Date 对象时观察到一个奇怪的现象。请注意,this.getDate() 和 other.getDate() 都将在我的应用程序中返回一个 Java Date 对象。

代码:

logger.debug("Date 1: " + this.getDate().toString());
logger.debug("Date 1: " + this.getDate().getTime());

logger.debug("Date 2: " + other.getDate().toString());
logger.debug("Date 2: " + other.getDate().getTime());

logger.debug("Dates are equal: " + this.getDate().equals(other.getDate()));
logger.debug("Dates match in comparison: " + (this.getDate().compareTo(other.getDate()) == 0));

输出:(添加空行以提高可读性)

Date 1: 2014-07-28 00:00:00.0
Date 1: 1406498400000

Date 2: Mon Jul 28 00:00:00 CEST 2014
Date 2: 1406498400000

Dates are equal: false
Dates match in comparison: true

有两件事我不明白:

  1. 为什么 equals() 返回 false?
  2. 为什么 toString() 的返回值会改变格式?

我检查了 Date.equals() 的文档它说:

Compares two dates for equality. The result is true if and only if the argument is not null and is a Date object that represents the same point in time, to the millisecond, as this object.

Thus, two Date objects are equal if and only if the getTime method returns the same long value for both.

我还查看了 Date.equals() 的实现:

public boolean equals(Object obj) {
return obj instanceof Date && getTime() == ((Date) obj).getTime();
}

那么为什么 equals() 返回 false,即使 getTime() 返回 1406498400000 Date 对象?

引用: http://docs.oracle.com/javase/7/docs/api/java/util/Date.html#equals(java.lang.Object)

最佳答案

我猜它们不是 Date 对象,因为格式不同。

java.sql.Timestamp 扩展了 java.util.Date 但它是不同的类并且不相等。

从时间戳

public boolean equals(java.lang.Object ts) {
if (ts instanceof Timestamp) {
return this.equals((Timestamp)ts);
} else {
return false;
}
}

您可能会发现,如果以相反的方式比较它们,它会返回 true。 :P

尝试

logger.debug("Dates are equal: " + other.getDate().equals(this.getDate()));

关于java - 比较Java中的Date对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24620064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com