[Python-Dev] Status on PEP-431 Timezones (original) (raw)

Akira Li 4kir4.1i at gmail.com
Wed Apr 15 21:12:40 CEST 2015


Alexander Belopolsky <alexander.belopolsky at gmail.com> writes:

On Wed, Apr 8, 2015 at 3:57 PM, Isaac Schwabacher <ischwabacher at wisc.edu> wrote:

On 15-04-08, Alexander Belopolsky wrote: > With datetime, we also have a problem that POSIX APIs don't have to deal with: local time > arithmetics. What is t + timedelta(1) when t falls on the day before DST change? How would > you set the isdst flag in the result? It's whatever time comes 606024 seconds after t in the same time zone, because the timedelta class isn't expressive enough to represent anything but absolute time differences (nor should it be, IMO). This is not what most uses expect. The expect datetime(y, m, d, 12, tzinfo=NewYork) + timedelta(1) to be datetime(y, m, d+1, 12, tzinfo=NewYork)

It is incorrect. If you want d+1 for +timedelta(1); use a naive datetime. Otherwise +timedelta(1) is +24h:

tomorrow = tz.localize(aware_dt.replace(tzinfo=None) + timedelta(1), is_dst=None) dt_plus24h = tz.normalize(aware_dt + timedelta(1)) # +24h

tomorrow and aware_dt have the same time but it is unknown how many hours have passed if the utc offset has changed in between. dt_plus24h may have a different time but there are exactly 24 hours have passed between dt_plush24 and aware_dt http://stackoverflow.com/questions/441147/how-can-i-subtract-a-day-from-a-python-date



More information about the Python-Dev mailing list