datetime.iterdate

Andrew Durdin adurdin at gmail.com
Wed Jul 14 01:38:03 EDT 2004


On Mon, 12 Jul 2004 11:47:04 -0700, Robert Brewer <fumanchu at amor.org> wrote:
> 
> def daterange(start, end):
>     for day in xrange((end - start).days):
>         yield start + datetime.timedelta(day)

How about a more general class to represent a date/time range
(essentially a timedelta with a starting datetime), with methods
returning lists/generators for different size increments. Something
like the following comes to my mind:
 
class datetimerange:
   def __init__(self, first, last):
      self.start_date = first
      self.date_delta = (last - first)

   def days(self, step=1):
      for day in range(0, self.date_delta.days, step):
         yield self.start_date + datetime.timedelta(days=day)

   def weeks(self, step=1):
      for day in range(0, self.date_delta.days, 7*step):
         yield self.start_date + datetime.timedelta(days=day)

   def hours(self, step=1):
      ...

   def minutes(self, step=1):
      ...

   etc...


Then your loop would look like the following:

for day in datetime.datetimerange(first_date, last_date).days:
   do_something_with(day)

   -- Andrew



More information about the Python-list mailing list