как получить список дат между двумя датами в Java

Я хочу список дат между датой начала и дата окончания.

Результатом должен быть список всех дат включая запуск и дата окончания.

62
задан Eric Leschinski 3 November 2014 в 05:49
поделиться

5 ответов

Вы также можете посмотреть Date.getTime () API. Это дает длинную позицию, к которой вы можете добавить свое приращение. Затем создайте новую дату.

List<Date> dates = new ArrayList<Date>();
long interval = 1000 * 60 * 60; // 1 hour in millis
long endtime = ; // create your endtime here, possibly using Calendar or Date
long curTime = startDate.getTime();
while (curTime <= endTime) {
  dates.add(new Date(curTime));
  curTime += interval;
}

и, возможно, у apache commons есть что-то подобное в DateUtils, или, возможно, у них тоже есть CalendarUtils :)

РЕДАКТИРОВАТЬ

, включая начальную и конечную дату, может быть невозможно, если ваш интервал не идеально :)

1
ответ дан 24 November 2019 в 16:34
поделиться

Одно из решений - создать экземпляр Calendar и запустить цикл, увеличив его Calendar.DATE поле, пока не будет достигнута желаемая дата. Также на каждом шаге вы должны создавать экземпляр Date (с соответствующими параметрами) и помещать его в свой список.

Какой-то грязный код:

    public List<Date> getDatesBetween(final Date date1, final Date date2) {
    List<Date> dates = new ArrayList<Date>();

    Calendar calendar = new GregorianCalendar() {{
        set(Calendar.YEAR, date1.getYear());
        set(Calendar.MONTH, date1.getMonth());
        set(Calendar.DATE, date1.getDate());
    }};

    while (calendar.get(Calendar.YEAR) != date2.getYear() && calendar.get(Calendar.MONTH) != date2.getMonth() && calendar.get(Calendar.DATE) != date2.getDate()) {
        calendar.add(Calendar.DATE, 1);
        dates.add(new Date(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE)));
    }

    return dates;
}
2
ответ дан 24 November 2019 в 16:34
поделиться

Еще в 2010 году я предложил использовать для этого Joda-Time .

Обратите внимание, что Joda-Time сейчас находится в режиме обслуживания. Начиная с версии 1.8 (2014 г.), вы должны использовать 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);
}

Не было бы слишком сложно реализовать свой собственный итератор, чтобы сделать это, это было бы еще лучше.

49
ответ дан 24 November 2019 в 16:34
поделиться

Получить количество дней между датами включительно.

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;
}
38
ответ дан 24 November 2019 в 16:34
поделиться

пожалуйста, найдите приведенный ниже код.

List<Date> dates = new ArrayList<Date>();

String str_date ="27/08/2010";
String end_date ="02/09/2010";

DateFormat formatter ; 

formatter = new SimpleDateFormat("dd/MM/yyyy");
Date  startDate = (Date)formatter.parse(str_date); 
Date  endDate = (Date)formatter.parse(end_date);
long interval = 24*1000 * 60 * 60; // 1 hour in millis
long endTime =endDate.getTime() ; // create your endtime here, possibly using Calendar or Date
long curTime = startDate.getTime();
while (curTime <= endTime) {
    dates.add(new Date(curTime));
    curTime += interval;
}
for(int i=0;i<dates.size();i++){
    Date lDate =(Date)dates.get(i);
    String ds = formatter.format(lDate);    
    System.out.println(" Date is ..." + ds);
}

выход:

Дата ...27/08/2010
Дата ...28.08.2010
Дата ...29/08/2010
Дата ...30.08.2010
Дата ...31/08/2010
Дата...09.01.2010
Дата ...09.02.2010

13
ответ дан 24 November 2019 в 16:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: