Hi Jess, I'm sorry if I'm failing to understand the use of this function from not looking closely at your code. I'm a bit dubious about the usefulness of this (I'm not sure I understand the use cases), but I'm very open to being convinced. Datetime semantics are very important in some areas -- I use them a lot.
I'm not convinced the semantics of monthdelta are obvious. A month doesn't have a consistent length -- it could be 28, 29, 30 or 31 days. What happens when you ask for the date in "1 month's" time on the 31st Jan? What date is a month after the 31st Jan? Do you have a good spec (er, I mean PEP) for this describing what happens in the edge cases and what is meant by a monthdelta? The bug notes say it "deals sensibly" with these issues, but that's really not enough to understand what the function is likely to do. At the very least, a few well-chosen examples would help to illustrate the functionality much more clearly. Cheers, -Tennessee On Thu, Apr 16, 2009 at 4:18 PM, Jess Austin <jess.aus...@gmail.com> wrote: > hi, > > I'm new to python core development, and I've been advised to write to > python-dev concerning a feature/patch I've placed at > http://bugs.python.org/issue5434, with Rietveld at > http://codereview.appspot.com/25079. > > This patch adds a "monthdelta" class and a "monthmod" function to the > datetime module. The monthdelta class is much like the existing > timedelta class, except that it represents months offset from a date, > rather than an exact period offset from a date. This allows us to > easily say, e.g. "3 months from now" without worrying about the number > of days in the intervening months. > > >>> date(2008, 1, 30) + monthdelta(1) > datetime.date(2008, 2, 29) > >>> date(2008, 1, 30) + monthdelta(2) > datetime.date(2008, 3, 30) > > The monthmod function, named in (imperfect) analogy to divmod, allows > us to round-trip by returning the interim between two dates > represented as a (monthdelta, timedelta) tuple: > > >>> monthmod(date(2008, 1, 14), date(2009, 4, 2)) > (datetime.monthdelta(14), datetime.timedelta(19)) > > Invariant: dt + monthmod(dt, dt+td)[0] + monthmod(dt, dt+td)[1] == dt + td > > These also work with datetimes! There are more details in the > documentation included in the patch. In addition to the C module > file, I've updated the datetime CAPI, the documentation, and tests. > > I feel this would be a good addition to core python. In my work, I've > often ended up writing annoying one-off "add-a-month" or similar > functions. I think since months work differently than most other time > periods, a new object is justified rather than trying to shoe-horn > something like this into timedelta. I also think that the round-trip > functionality provided by monthmod is important to ensure that > monthdeltas are "first-class" objects. > > Please let me know what you think of the idea and/or its execution. > > thanks, > Jess Austin > _______________________________________________ > 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/tleeuwenburg%40gmail.com > -- -------------------------------------------------- Tennessee Leeuwenburg http://myownhat.blogspot.com/ "Don't believe everything you think"
_______________________________________________ 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