Ответ 1
Если вы хотите сравнивать даты, вы, вероятно, захотите использовать класс LocalDate
, а не DateTime
.
Документы JodaTime довольно хороши: http://joda-time.sourceforge.net/apidocs/org/joda/time/LocalDate.html
Есть ли способ сравнить только даты для объекта DateTime с помощью функции isBefore?
Например,
DateTime start = new DateTime(Long.parseLong(<someInput>));
DateTime end = new DateTime(Long.parseLong(<someInput>));
Теперь, когда я это сделаю,
while (start.isBefore(end)) {
// add start date to the list
start = start.plusDays(1);
}
Это приводит к непоследовательному поведению (для моего сценария), так как оно учитывает время, а то, что я хочу, - это иметь только даты, сравниваемые с использованием isBefore. Есть ли способ, которым я могу это сделать?
Пожалуйста, дайте мне знать.
Спасибо!
Если вы хотите сравнивать даты, вы, вероятно, захотите использовать класс LocalDate
, а не DateTime
.
Документы JodaTime довольно хороши: http://joda-time.sourceforge.net/apidocs/org/joda/time/LocalDate.html
Другая стратегия заключается в форматировании.
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
DateTime newStart = df.parse(start);
DateTime newEnd = df.parse(end);
while (newStart.isBefore(newEnd)) {
// add start date to the list
newStart = newStart.plusDays(1);
}
Переключитесь на использование LocalDate, а не на DateTime. Концепция в JodaTime является "частичной" (см. Интерфейс ReadablePartial).
Вы можете установить время DateTime
на ноль (что означает полночь) после разбора:
// withTime sets hours, minutes, seconds, milliseconds
DateTime start = new DateTime(Long.parseLong(<someInput>)).withTime(0, 0, 0, 0);
DateTime end = new DateTime(Long.parseLong(<someInput>)).withTime(0, 0, 0, 0);
Или используйте один из других классов времени Joda; там гораздо больше, чем DateTime
! Если вы имеете дело только с датами, вы, вероятно, захотите использовать LocalDate
вместо DateTime
.