package edu.ualberta.med.biobank.common.util; import java.util.Calendar; import java.util.Date; /** * This class should be used to compare dates since Hibernate can return * java.sql.Timestamp for some java.util.Date fields. Note that * java.util.Timestamp.equals() will always return false if passed a * java.sql.Date, as the later does not have any nanonseconds. * * <pre> * java.util.Date date = new java.util.Date(); * java.util.Date stamp = new java.sql.Timestamp(date.getTime()); * assertTrue(date.equals(stamp)); * assertTrue(date.compareTo(stamp) == 0); * assertTrue(stamp.compareTo(date) == 0); * assertTrue(stamp.equals(date)); // <-- FAILS * </pre> * */ public class DateCompare { public static int compare(Date date1, Date date2) { Calendar cal1 = Calendar.getInstance(); Calendar cal2 = Calendar.getInstance(); cal1.setTime(date1); cal2.setTime(date2); int[] fields = new int[] { Calendar.YEAR, Calendar.DAY_OF_YEAR, Calendar.HOUR_OF_DAY, Calendar.MINUTE, Calendar.SECOND }; int diff = 0; for (int field : fields) { diff = cal2.get(field) - cal1.get(field); if (diff != 0) return diff; } return 0; } }