Thursday, March 19, 2009

How can I iterate through all dates in a range?

The following custom iterator allows iteration through a date range.

import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;

public class DateIterator
implements Iterator, Iterable
{

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

public DateIterator(Date start, Date end)
{
this.start.setTime(start);
this.end.setTime(end);
this.current.setTime(start);
}

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

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

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

public Iterator iterator()
{
return this;
}

public static void main(String[] args)
{
Date d1 = new Date();
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 20);
Date d2 = cal.getTime();

Iterator i = new DateIterator(d1, d2);
while(i.hasNext())
{
Date date = i.next();
System.out.println(date);
}
}
}

No comments: