Re: [Python-ideas] [Python-Dev] datetime module enhancements

On 3/12/07, Steven Bethard steven.bethard@gmail.com wrote:
[I'm not on this list, so please keep me in the CC if you reply]
On 3/11/07, Collin Winter collinw@gmail.com wrote:
On 3/9/07, Steven Bethard steven.bethard@gmail.com wrote on python-dev:
It's *not* okay to say that a date() is less than, greater than or equal to a datetime() if the year/month/day *does* match. The correct temporal relation is During, but Python doesn't have a During operator. During is not the same as less-than, greater-than or equal-to, so all of these should be False:: datetime.datetime(2006, 1, 1, 0, 0, 0) < datetime.date(2006, 1, 1) datetime.datetime(2006, 1, 1, 0, 0, 0) > datetime.date(2006, 1, 1) datetime.datetime(2006, 1, 1, 0, 0, 0) == datetime.date(2006, 1, 1) That is, the datetime() is not less than, greater than or equal to the corresponding date().
Some discussion of these kinds of issues is here: http://citeseer.ist.psu.edu/allen94actions.html The essence is that in order to properly compare intervals, you need the Meets, Overlaps, Starts, During and Finishes operators in addition to the Before (<) and Simulaneous (=) operators.
So, let's not conflate Before, After or Simultaneous with the other relations -- if it's not strictly Before (<), After (>) or Simultaneous (=), we can just say so by returning False.
It might be neat to add a __contains__ method to date() objects so that "datetime(2007, 1, 1, 0, 0, 0) in date(2007, 1, 1)" would be True. This would seem to fulfill the During operator.
That's a nice idea. With the simplest implementation, you could then guarantee that one of the following would always be true::
datetime < date datetime in date datetime > date
(That would actually conflate the Starts, Finishes and During relations in the __contains__ operator, but I think that's a perfectly reasonable interpretation, and I know it would be useful in my code at least.)
I'll work up a patch.
Collin Winter

On 3/12/07, Collin Winter collinw@gmail.com wrote:
On 3/12/07, Steven Bethard steven.bethard@gmail.com wrote:
[I'm not on this list, so please keep me in the CC if you reply]
[snip]
That's a nice idea. With the simplest implementation, you could then guarantee that one of the following would always be true::
datetime < date datetime in date datetime > date
(That would actually conflate the Starts, Finishes and During relations in the __contains__ operator, but I think that's a perfectly reasonable interpretation, and I know it would be useful in my code at least.)
I'll work up a patch.
Posted as #1679204 (http://python.org/sf/1679204). In addition to date.__contains__, I had to add a datetime.__contains__ that throws a TypeError (since datetime inherits from date).
While writing the patch, I had the idea of making "time in date" always return True, but I'm not sure that would be useful.
Collin Winter

On 3/12/07, Collin Winter collinw@gmail.com wrote:
Posted as #1679204 (http://python.org/sf/1679204). In addition to date.__contains__, I had to add a datetime.__contains__ that throws a TypeError (since datetime inherits from date).
Very cool. Thanks!
While writing the patch, I had the idea of making "time in date" always return True, but I'm not sure that would be useful.
Yeah, I'd hold off on that one until someone indicates that they need it. Seems like there would be a number of places where True might be wrong for a particular bit of code.
Steve
participants (3)
-
Christian Heimes
-
Collin Winter
-
Steven Bethard