Как перебрать диапазон дат в Java? - PullRequest
121 голосов
/ 26 декабря 2010

В моем сценарии мне нужно выполнить ряд действий в диапазоне дат, с учетом даты начала и окончания.
Пожалуйста, дайте мне руководство для достижения этой цели с помощью Java.

for ( currentDate = starDate; currentDate < endDate; currentDate++) {

}

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

Ответы [ 12 ]

0 голосов
/ 18 февраля 2018

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

public class DateIterator implements Iterator<Date>, Iterable<Date>
{

 private Calendar end = Calendar.getInstance();
 private Calendar current = Calendar.getInstance();

 public DateIterator(Date start, Date end)
 {
     this.end.setTime(end);
     this.end.add(Calendar.DATE, -1);
     this.current.setTime(start);
     this.current.add(Calendar.DATE, -1);
 }

 @Override
 public boolean hasNext()
 {
     return !current.after(end);
 }

 @Override
 public Date next()
 {
     current.add(Calendar.DATE, 1);
     return current.getTime();
 }

 @Override
 public void remove()
 {
     throw new UnsupportedOperationException(
        "Cannot remove");
 }

 @Override
 public Iterator<Date> iterator()
 {
     return this;
 }
}

и используйте его как:

Iterator<Date> dateIterator = new DateIterator(startDate, endDate);
while(dateIterator.hasNext()){
      Date selectedDate = dateIterator .next();

}
0 голосов
/ 08 февраля 2017

Это поможет вам начать 30 дней назад и вернуться к сегодняшней дате.Вы можете легко изменить диапазон дат и направления.

private void iterateThroughDates() throws Exception {
    Calendar start = Calendar.getInstance();
    start.add(Calendar.DATE, -30);
    Calendar end = Calendar.getInstance();
    for (Calendar date = start; date.before(end); date.add(Calendar.DATE, 1))
        {
        System.out.println(date.getTime());
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...