[Datetime-SIG] PEP 495: What's left to resolve

Guido van Rossum guido at python.org
Tue Sep 8 17:09:59 CEST 2015


On Tue, Sep 8, 2015 at 12:59 AM, Alexander Belopolsky <
alexander.belopolsky at gmail.com> wrote:

>
> On Mon, Sep 7, 2015 at 9:57 PM, Alexander Belopolsky <
> alexander.belopolsky at gmail.com> wrote:
>
>> Solution 1: Make t1 > t0.
>>
>> Solution 2: Leave t1 == t0, but make t1 != u1.
>>
>
> Solution 3:  Leave t1 == t0, but make *both* t0 != u0 and t1 != u1 if
> t0.utcoffset() != t1.utcoffset().
>
> In other words,
>
> def __eq__(self, other):
>     n_self = self.replace(tzinfo=None)
>     n_other = other.replace(tzinfo=None)
>     if self.tzinfo is other.tzinfo:
>         return n_self == n_other
>     u_self = n_self - self.utcoffset()
>     v_self = n_self - self.replace(fold=(1-self.fold)).utcoffset()
>     u_other = n_other - other.utcoffset()
>     v_other = n_other - other.replace(fold=(1-self.fold)).utcoffset()
>     return u_self == u_other == v_self == v_other
>
> Before anyone complaints that this makes comparison 4x slower, I note that
> we can add obvious optimizations for the common tzinfo is
> datetime.timezone.utc and  isinstance(tzinfo, datetime.timezone) cases.
> Users that truly want to compare aware datetime instances between two
> variable offset timezones, should realize that fold/gap detection in *both*
> r.h.s. and l.h.s. zones is part of the operation that they request.
>
> This solution has some nice properties compared to the solution 2: (1) it
> restores the transitivity - we no longer have u0 == t0 == t1 and t1 != u1;
> (2) it restores the symmetry between fold=0 and fold=1 while preserving a
> full backward compatibility.
>
> I also think this solution makes an intuitive sense: since we cannot
> decide which of the two UTC times u0 and u1 should belong in the
> equivalency class of t0 == t1 - neither should.  "In the face of ambiguity"
> and all that.
>

But it breaks compatibility: it breaks the rule that for fold=0 nothing
changes.

-- 
--Guido van Rossum (python.org/~guido)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/datetime-sig/attachments/20150908/7b213a69/attachment.html>


More information about the Datetime-SIG mailing list