Alexander Belopolsky <alexander.belopolsky@gmail.com> writes:
On Wed, Apr 8, 2015 at 3:57 PM, Isaac Schwabacher <ischwabacher@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 60*60*24 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=New_York) + timedelta(1)
to be
datetime(y, m, d+1, 12, tzinfo=New_York)
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-py...