java.sql.Timestamp compareTo bug in JDK 1.5 ?
By admin on Dec 8, 2007 in Java, Programming
If you run the following in code JDK1.5
java.util.Date dt1 = new Date();
java.util.Date dt2 = new java.sql.Timestamp(dt1.getTime());
if (dt2.compareTo(dt1) <= 0) {
System.out.println("ok");
}
You will encounter the following error
java.lang.ClassCastException: java.util.Date at java.sql.Timestamp.compareTo(Timestamp.java:474)
but not the opposite
java.util.Date dt1 = new Date();
java.util.Date dt2 = new java.sql.Timestamp(dt1.getTime());
if (dt1.compareTo(dt2) <= 0) {
System.out.println("ok");
}
I encountered this problem when I was migrating some Java code from JDK1.4 to JDK1.5. Image the line
java.util.Date dt2 = new java.sql.Timestamp(dt1.getTime());
is replaced with results from a JDBC ResultSet
java.util.Date dt2 = resultSet.getTimeStamp("dtField");
java.sql.Timestamp extends java.util.Date.
This problem does not happen in JDK1.4 and JDK1.6. It is only for JDK1.5. It is described here.
To resolve this issue, I changed the code to
java.util.Date dt1 = new Date();
java.util.Date dt2 = new java.sql.Timestamp(dt1.getTime());
if (dt2.getTime() <= dt1.getTime()) {
System.out.println("Equal");
}
or
java.util.Date dt1 = new Date();
java.util.Date dt2 = new java.sql.Timestamp(dt1.getTime());
if (dt1.compareTo(dt2) <= 0) {
System.out.println("Equal");
}
UPDATE: After upgrading to the latest JDK1.5 patch for the Unix server, the bug is fixed.
