解决方案:懒惰地走一个星期。
import org.joda.time.LocalDate;import java.util.Iterator;public class DayOfWeekIterator implements Iterator<LocalDate>{ private final LocalDate end; private LocalDate nextDate; public DayOfWeekIterator(LocalDate start, LocalDate end, int dayOfWeekToIterate){ this.end = end; nextDate = start.withDayOfWeek(dayOfWeekToIterate); if (start.getDayOfWeek() > dayOfWeekToIterate) { nextDate = nextDate.plusWeeks(1); } } public boolean hasNext() { return !nextDate.isAfter(end); } public LocalDate next() { LocalDate result = nextDate; nextDate = nextDate.plusWeeks(1); return result; } public void remove() { throw new UnsupportedOperationException(); } }测试
import org.joda.time.DateTimeConstants;import org.joda.time.LocalDate;public class DayOfWeekIteratorTest { public static void main(String[] args) { LocalDate startDate = new LocalDate(2010, 12, 1);//1st Dec 2010 LocalDate endDate = new LocalDate(2010, 12, 31);//31st Dec 2010 DayOfWeekIterator it = new DayOfWeekIterator(startDate, endDate, DateTimeConstants.FRIDAY); while (it.hasNext()) { System.out.println(it.next()); } }}


