Datetime utility functions

Gustavo Niemeyer niemeyer at conectiva.com
Tue Sep 16 13:06:27 EDT 2003


> > Have a look at this:
> 
> I like that. I'm not entirely happy with the name of the class, but as
> I can't come up with a better suggestion, I shouldn't criticise...

The name explains it pretty well. It's like timedelta, but it's
a "relative" delta, since how much it will advance will depend on
the date you apply it to.

[...]
> Sorry, I didn't explain that very well. Imagine an application to report
> stats over a period. The user can specify a date, and the report will be
> for a calendar month, containing the user's required date. So my code
> will be something like
> 
>     start = user_date.replace(day=1) # Start of the month
>     end = "Last day of the month"

Oh! Ok.. I understand now.

[...]
> With your "relativedelta" I could do this pretty easily, by
> 
>     end = start + relativedelta(months=+1, days=-1)

Hummm.. no. Look:

 >>> date.today()+relativedelta(months=+1, days=-1)
 datetime.date(2003, 10, 15)

Instead, it should be done by:

 >>> date.today()+relativedelta(months=+1, day=31)

Notice that it works also for other months:

 >>> date.today()+relativedelta(month=2, day=31)
 datetime.date(2003, 2, 28)

This is described in step 4 of the documentation I pasted
in the mail.

> but I still feel that I'd need to have an explanatory comment. The
> datetime module *knows* the number of days in the month - I'd just
> like it to tell *me*.

Have you noticed that this is also offered by the calendar module?

 >>> import calendar
 >>> calendar.monthrange(2003, 9)
 (0, 30)

-- 
Gustavo Niemeyer
http://niemeyer.net





More information about the Python-list mailing list