4
Foo a;
...
Date b = a.getDate();
Date c = new Date(b.getTime());

if (b.equals(c)) System.out.println("equal");
else System.out.println("not equal");

System.out.println(b.toString());
System.out.println(b.getTime());
System.out.println(c.toString());
System.out.println(c.getTime());

以上打印:

not equal
2011-07-23 22:24:21.834
1311459861834
Sat Jul 23 22:24:21
1311459861834

为什么是这样?这是日期中的错误吗?这很难相信。

4

3 回答 3

6

a.getDate()显然返回java.sql.Timestamp

java.sql.Timestampjava.uti.Date具有与基本上不同的等于方法

return obj instanceof Date && getTime() == ((Date) obj).getTime();

Timestamp然而,它更复杂,它也需要目标Timestamp

if (ts instanceof Timestamp) {
    return this.equals((Timestamp)ts);//the impl checks nanos too
  } else {
    return false;
  }

您可能使用 Hibernate 或类似的东西,它坚持java.util.DateTimestamp.

于 2011-07-23T23:10:40.760 回答
4

a.getDate()可能不会返回java.util.Date,而是其他东西,它扩展了它。

这将解释奇怪b.toString()b.equals(c)行为。

于 2011-07-23T23:08:01.617 回答
2

这只有在a.getDate()返回 的子类时才有可能Date,例如java.sql.Date.

于 2011-07-23T23:10:00.627 回答