Comparing two java.util.Dates to see if they are in the same day

datetime, java

Solution

Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
boolean sameDay = cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR) &&
                  cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR);

Note that "same day" is not as simple a concept as it sounds when different time zones can be involved. The code above will for both dates compute the day relative to the time zone used by the computer it is running on. If this is not what you need, you have to pass the relevant time zone(s) to the `Calendar.getInstance()` calls, after you have decided what exactly you mean with "the same day".

And yes, Joda Time's `LocalDate` would make the whole thing much cleaner and easier (though the same difficulties involving time zones would be present).

Problem

I need to compare two `Date`s (e.g. `date1` and `date2`) and come up with a `boolean sameDay` which is true of the two `Date`s share the same day, and false if they are not. How can I do this? There seems to be a whirlwind of confusion here... and I would like to avoid pulling in other dependencies beyond the JDK if at all possible. to clarify: if `date1` and `date2` share the same year, month, and day, then `sameDay` is true, otherwise it is false. I realize this requires knowledge of a timezone... it would be nice to pass in a timezone but I can live with either GMT or local time as long as I know what the behavior is. again, to clarify: ``` date1 = 2008 Jun 03 12:56:03 date2 = 2008 Jun 03 12:59:44 => sameDate = true date1 = 2009 Jun 03 12:56:03 date2 = 2008 Jun 03 12:59:44 => sameDate = false date1 = 2008 Aug 03 12:00:00 date2 = 2008 Jun 03 12:00:00 => sameDate = false ```

Original source

Related problems