Я должен выдержать сравнение два Date
s (например. date1
и date2
) и придумайте a boolean sameDay
который верен для двух Date
s совместно используют тот же день и ложь, если они не.
Как я могу сделать это? Кажется, существует вихрь беспорядка здесь..., и я хотел бы постараться не вытягивать в других зависимостях вне JDK если вообще возможный.
разъясниться: если date1
и date2
совместно используйте тот же год, месяц и день, затем sameDay
верно, иначе это - ложь. Я понимаю, что это требует знания часового пояса... было бы хорошо передать в часовом поясе, но я могу жить или с GMT или с местное время, пока я знаю, каково поведение.
снова, для разъяснения:
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
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);
Обратите внимание, что понятие «один и тот же день» не так просто, как кажется, когда могут быть задействованы разные часовые пояса. Приведенный выше код для обеих дат вычисляет день относительно часового пояса, используемого компьютером, на котором он работает. Если это не то, что вам нужно, вы должны передать соответствующий часовой пояс в вызовы Calendar.getInstance ()
после того, как вы определились, что именно вы имеете в виду под «в тот же день».
И да, Joda Time LocalDate
сделает все это намного чище и проще (хотя будут присутствовать те же трудности, связанные с часовыми поясами).
Для этого я использую пакет apache commons lang (а именно org.apache.commons.lang.time.DateUtils )
boolean samedate = DateUtils.isSameDay(date1, date2); //Takes either Calendar or Date objects
Как насчет:
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
return fmt.format(date1).equals(fmt.format(date2));
Вы также можете установить часовой пояс в SimpleDateFormat, если это необходимо.