Сравнение двух дат с использованием времени Joda
Я хочу сравнить две даты, однако у меня возникают проблемы. 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
. Я предполагаю, что это из-за времени. Как я могу проверить, равны ли эти две даты друг другу (я имею в виду год, месяц, дату)?
9 ответов
System.out.println(d.toDateMidnight().isEqual(e.toDateMidnight()));
или
System.out.println(d.withTimeAtStartOfDay().isEqual(e.withTimeAtStartOfDay()));
вы должны использовать toLocalDate ():
date1.toLocalDate().isEqual(date2.toLocalDate())
Это избавит от части времени DateTime.
есть и другой подход, но он не учитывает случай, когда две даты имеют разный часовой пояс, поэтому он менее надежен:
date1.withTimeAtStartOfDay().isEqual(date2.withTimeAtStartOfDay())
Если вы хотите игнорировать компоненты времени (т. е. вы хотите сравнивать только даты), вы можете использовать класс DateMidnight вместо времени даты. Поэтому ваш пример будет выглядеть примерно так:
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.
поскольку они являются объектами DateTime, их временные части также учитываются при их сравнении. Попробуйте установить части времени первой даты в 0, например:
d = d.withTime(0, 0, 0, 0);
это статический метод, который работает для меня.
public static boolean isSameDay(DateTime date1, DateTime date2){
return date1.withTimeAtStartOfDay().isEqual(date2.withTimeAtStartOfDay());
}
я наткнулся на этот вопрос в сравнении с сегодняшним днем. Вот как вы можете сравнить дату с сегодняшним днем:
date1.toLocalDate().isBeforeNow() // works also with isAfterNow
DateTimeComparator.getDateOnlyInstance().compare(obj1, obj2);
obj1 и obj2 могут быть строкой, длинной, датой (java.util)... Подробнее см. http://www.joda.org/joda-time/apidocs/index.html?org/joda/time/DateTimeComparator.html
напишите свой собственный метод
public boolean checkEqual(DateTime first,DateTime second){
if(first.<getterforyear> == second.<getterforyear> && first.<getterformonth> == second.<getterformonth> && first.<getterforday> == second.<getterforday>){
return true;
}
return false;
}