Подтвердить что ты не робот

Сравнение двух дат с использованием времени Джоды

Я хочу сравнить две даты, однако у меня возникают проблемы. 1 создается из объекта java.util.date, а другой создается вручную. Ниже приведен пример кода:

Date ds = new Date();
DateTime d = new DateTime(ds);

DateTime e = new DateTime(2012,12,07, 0, 0);
System.out.println(d.isEqual(e));

Однако тест получается false. Я предполагаю, что это из-за времени. Как я могу проверить, равны ли эти две даты друг другу (я имею в виду, что год, месяц, дата идентичны)?

4b9b3361

Ответ 1

System.out.println(d.toDateMidnight().isEqual(e.toDateMidnight()));

или

System.out.println(d.withTimeAtStartOfDay().isEqual(e.withTimeAtStartOfDay()));

Ответ 2

Вы должны использовать toLocalDate():

date1.toLocalDate().isEqual(date2.toLocalDate())

Это избавится от временной части DateTime.

Существует другой подход, но он не учитывает случай, когда две даты имеют разную часовую зону, поэтому они менее надежны:

date1.withTimeAtStartOfDay().isEqual(date2.withTimeAtStartOfDay())

Ответ 4

Если вы хотите игнорировать компоненты времени (т.е. хотите сравнить только даты), вы можете использовать класс DateMidnight вместо Date Time. Итак, ваш пример будет выглядеть примерно так:

Date ds = new Date();
DateMidnight d = new DateMidnight(ds);

DateMidnight e = new DateMidnight(2012, 12, 7);
System.out.println(d.isEqual(e));

Но будьте осторожны, он напечатает "true" только сегодня:)

Также обратите внимание, что по умолчанию JDK Date и все временные классы Joda-Time (DateTime и DateMidnight включены) строятся с использованием часового пояса по умолчанию. Поэтому, если вы создаете одну дату для сравнения в коде, но извлекаете другую из базы данных, которая, вероятно, хранит даты в UTC, вы можете столкнуться с несоответствиями, если вы не находитесь в часовом поясе UTC.

Ответ 5

Поскольку они являются объектами DateTime, их временные части также учитываются, когда вы их сравниваете. Попробуйте установить временные части первой даты на 0, например:

d = d.withTime(0, 0, 0, 0);

Ответ 6

Это статический метод, который работает для меня.

public static boolean isSameDay(DateTime date1, DateTime date2){
    return date1.withTimeAtStartOfDay().isEqual(date2.withTimeAtStartOfDay());
}

Ответ 7

Напишите свой собственный метод

public boolean checkEqual(DateTime first,DateTime second){
     if(first.<getterforyear> == second.<getterforyear> && first.<getterformonth> == second.<getterformonth> && first.<getterforday> == second.<getterforday>){
         return true;
  }
 return false;
}