On 2009-04-16 17:17, Paul Moore wrote:
2009/4/16 Robert Kern<robert.k...@gmail.com>:

from dateutil.relativedelta import *
dt = relativedelta(months=1)
dt
relativedelta(months=+1)
from datetime import datetime
datetime(2009, 1, 15) + dt
datetime.datetime(2009, 2, 15, 0, 0)
datetime(2009, 1, 31) + dt
datetime.datetime(2009, 2, 28, 0, 0)
dt.months
1
datetime(2009, 1, 31) + relativedelta(years=-1)
datetime.datetime(2008, 1, 31, 0, 0)

Yes, but given

r = relativedelta(d1, d2)

how do I determine the number of months between d1 and d2, and the
"remainder" - what monthmod gives me.

Oops! Sorry, I read too quickly and misread "monthmod" as "monthdelta".

From the code, r.months looks
like it works, but it's not documented, and I'm not 100% sure if it's
always computed.

The result of relativedelta(d1, d2) is the same thing as if it were explicitly constructed from the years=, months=, etc. keyword arguments. From this example, I think this is something that can be relied upon:

"""
It works with dates too.

>>> relativedelta(TODAY, johnbirthday)
relativedelta(years=+25, months=+5, days=+11, hours=+12)
"""

The use case I'm thinking of is converting the difference between 2
dates into "3 years, 2 months, 5 days" or whatever. I've got an
application which needs to get this right for one of the dates being
29th Feb, so I *really* get to exercise the corner cases :-)

I believe relativedelta() is intended for this use case although it may resolve ambiguities in a different way than you were hoping.

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
 that is made terrible by our own mad attempt to interpret it as though it had
 an underlying truth."
  -- Umberto Eco

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to