[Tutor] timedelta doesnt do month
Kent Johnson
kent37 at tds.net
Mon Feb 5 20:28:15 CET 2007
frank h. wrote:
> so what is the easiest way to to get to a list of months in a given
> timeinterval, e.g.
>
> >> startdate = datetime.date(2005,2,13)
> >> enddate = datetime.date(2007,1,25)
> >> delta = enddate - startdate
> >> delta.days
> 711
> >> delta.months
> exceptions.AttributeError Traceback (most
> recent call last)
> AttributeError: 'datetime.timedelta' object has no attribute 'months'
>
> I want to compute the "monthdifference" and so I can then iterate over
> the months from my startdate to my enddate
> what is the easiest way to accomplish this?
Because of the ambiguities of month arithmetic (what is 2005-1-31 plus
one month?) datetime refuses to guess and does not support this. ("In
the face of ambiguity, refuse the temptation to guess." - The Zen of
Python) The third-party dateutil module is not as circumspect:
In [1]: import datetime
In [2]: startdate = datetime.date(2005,2,13)
In [3]: enddate = datetime.date(2007,1,25)
In [10]: from dateutil.relativedelta import relativedelta
In [11]: delta = relativedelta(months=+1)
In [16]: d = startdate
In [17]: while d <= enddate:
....: print d
....: d += delta
....:
....:
2005-02-13
2005-03-13
2005-04-13
2005-05-13
2005-06-13
2005-07-13
2005-08-13
2005-09-13
2005-10-13
2005-11-13
2005-12-13
2006-01-13
2006-02-13
2006-03-13
2006-04-13
2006-05-13
2006-06-13
2006-07-13
2006-08-13
2006-09-13
2006-10-13
2006-11-13
2006-12-13
2007-01-13
http://labix.org/python-dateutil
Kent
More information about the Tutor
mailing list