как получить список дат между двумя датами в Java
Мне нужен список дат между датой начала и датой окончания.
Результатом должен быть список всех дат, включая начальную и конечную даты.
Переведено автоматически
Ответ 1
Если вы используете Java 8, существует гораздо более чистый подход. Новый пакет java.time в Java 8 включает в себя функции API Joda-Time.
Ваше требование может быть решено с помощью приведенного ниже кода:
String s = "2014-05-01";String e = "2014-05-10";LocalDate start = LocalDate.parse(s);LocalDate end = LocalDate.parse(e);List<LocalDate> totalDates = new ArrayList<>();while (!start.isAfter(end)) { totalDates.add(start); start = start.plusDays(1);}
Ответ 2
Еще в 2010 году я предложил использовать для этого Joda-Time.Обратите внимание, что Joda-Time сейчас находится в режиме обслуживания. Начиная с версии 1.8 (2014), вам следует использовать java.time.
Еще в 2010 году я предложил использовать для этого Joda-Time.
Обратите внимание, что Joda-Time сейчас находится в режиме обслуживания. Начиная с версии 1.8 (2014), вам следует использовать java.time.
java.time
Добавляйте по одному дню за раз до достижения конечной даты:
int days = Days.daysBetween(startDate, endDate).getDays();List<LocalDate> dates = new ArrayList<LocalDate>(days); // Set initial capacity to `days`.for (int i=0; i < days; i++) { LocalDate d = startDate.withFieldAdded(DurationFieldType.days(), i); dates.add(d);}
Было бы не слишком сложно реализовать свой собственный итератор и для этого, это было бы еще приятнее.
Ответ 3
Получить количество дней между датами включительно.
public static List<Date> getDaysBetweenDates(Date startdate, Date enddate){ List<Date> dates = new ArrayList<Date>(); Calendar calendar = new GregorianCalendar(); calendar.setTime(startdate); while (calendar.getTime().before(enddate)) { Date result = calendar.getTime(); dates.add(result); calendar.add(Calendar.DATE, 1); } return dates;}
Ответ 4
Редактировать: Joda-Time теперь устарел, изменил ответ, чтобы вместо него использовать Java 8.
Вот способ Java 8, использующий streams.
List<LocalDate> daysRange = Stream.iterate(startDate, date -> date.plusDays(1)).limit(numOfDays).collect(Collectors.toList());