Сравнение двух java.util. Даты, чтобы видеть, находятся ли они в тот же день

Я должен выдержать сравнение два Dates (например. date1 и date2) и придумайте a boolean sameDay который верен для двух Dates совместно используют тот же день и ложь, если они не.

Как я могу сделать это? Кажется, существует вихрь беспорядка здесь..., и я хотел бы постараться не вытягивать в других зависимостях вне 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
235
задан Jason S 27 February 2016 в 10:24
поделиться

3 ответа

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 сделает все это намного чище и проще (хотя будут присутствовать те же трудности, связанные с часовыми поясами).

396
ответ дан 23 November 2019 в 03:26
поделиться

Для этого я использую пакет apache commons lang (а именно org.apache.commons.lang.time.DateUtils )

boolean samedate = DateUtils.isSameDay(date1, date2);  //Takes either Calendar or Date objects
154
ответ дан 23 November 2019 в 03:26
поделиться

Как насчет:

SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
return fmt.format(date1).equals(fmt.format(date2));

Вы также можете установить часовой пояс в SimpleDateFormat, если это необходимо.

326
ответ дан 23 November 2019 в 03:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: