日期时间本地化不代表DST

时间:2019-07-23 01:56:21

标签: python python-datetime

我以这种方式创建了一个下午4点的datetime对象:

dt = pytz.timezone('America/New_York').localize(datetime(1970, 1, 1, hour=16))

现在我要替换月份和年份:

newDt = dt.replace(year=2019, month=7, day=23)

打印newDt对象的产量,这很奇怪,因为它今天的格林尼治标准时间是-4:

2019-07-23 16:00:00-05:00    

是否有一种方法可以强制重新计算DST偏移量?

1 个答案:

答案 0 :(得分:0)

它似乎与时区本身有关。就像pytc.utc'Europe/London'不同,在这种情况下,'America/New_York''US/Eastern'不同。

newDt = dt.replace(year=2019, month=7, day=23) #2019-07-23 16:00:00-05:00
newDt.astimezone(pytz.timezone('US/Eastern'))  #2019-07-23 17:00:00-04:00

但是,根据Wikipedia,它们应该表现出完全相同的方式。

更正

我上面的回答似乎不正确。

显然,该问题似乎与replace函数中的某些异常行为有关,如果原始日期不在夏令时期间,则该函数不携带 dst 信息。有人提到了here

您需要使用astimezone

重新定位该日期
print (newDt.astimezone(pytz.timezone('America/New_York')))

Out[14]:
2019-07-23 17:00:00-04:00