java.sql.Timestampのequalsメソッド
Timestampのequalsメソッドを使うときは要注意。
public void testTimestampCompare() { final Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, 2006); calendar.set(Calendar.MONTH, 3); calendar.set(Calendar.DAY_OF_MONTH, 30); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); calendar.set(Calendar.MILLISECOND, 999); final long t = calendar.getTime().getTime(); final Timestamp t1 = new Timestamp(t); final Timestamp t2 = new Timestamp(t); assertEquals(false, t1.before(t2)); assertEquals(false, t1.after(t2)); assertEquals(false, t2.before(t1)); assertEquals(false, t2.after(t1)); assertEquals(true, t1.equals(t2)); assertEquals(0, t1.compareTo(t2)); assertEquals(0, t2.compareTo(t1)); assertEquals(true, t2.equals(t1)); // final Date d1 = new Date(t); assertEquals(false, d1.before(t1)); assertEquals(false, d1.after(t1)); assertEquals(false, t1.before(d1)); assertEquals(false, t1.after(d1)); assertEquals(true, d1.equals(t1)); assertEquals(0, d1.compareTo(t1)); assertEquals(0, t1.compareTo(d1)); // ここまでは通るけど、これは通らない assertEquals(true, t1.equals(d1)); }
なんでだろうと思ってソースを見てみたら一目瞭然。
public boolean equals(java.lang.Object ts) { if (ts instanceof Timestamp) { return this.equals((Timestamp)ts); } else { return false; } }
Timestamp以外は比較の対象じゃないそうです。ちなみにJDKは1.4.2_08です。