Сравнение только даты с использованием «isBefore» в Java Joda Time - PullRequest
14 голосов
/ 08 марта 2012

Можно ли сравнивать только даты для 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.Есть ли способ, которым я могу это сделать?

Пожалуйста, дайте мне знать.

Спасибо!

Ответы [ 5 ]

21 голосов
/ 08 марта 2012

Если вы хотите сравнивать только даты, возможно, вы хотите использовать класс LocalDate, а не DateTime.

Документы JodaTime довольно хороши: http://joda -time.sourceforge.net/apidocs/org/joda/time/LocalDate.html

9 голосов
/ 08 марта 2012

Другая стратегия - отформатировать его.

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);
}    
1 голос
/ 30 июня 2018

Это довольно старый вопрос, но стоит добавить ответ!В наши дни Joda-time не является предпочтительным, учитывая, что у нас есть замечательная поддержка в Java 8 для операций с датой и временем.Если вам все еще нужно использовать joda-time, тогда используйте метод compareTo в классе LocalDate.

Сравнивает этот фрагмент с другим, возвращающим целое число, указывающее порядок.Поля сравниваются по порядку, от наибольшего к наименьшему.Первое неравное поле используется для определения результата.

Указанный объект должен быть частичным экземпляром, типы полей которого соответствуют типам этого частичного.

Официальная Java-документ можно найти здесь .

1 голос
/ 08 марта 2012

Переключитесь на использование LocalDate, а не DateTime.Концепция в JodaTime является «частичной» (см. Интерфейс ReadablePartial).

0 голосов
/ 08 марта 2012

Вы можете установить время 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 Time; Там намного больше, чем DateTime! Если вы имеете дело только с датами, вы, вероятно, захотите использовать LocalDate вместо DateTime.

...