我以这种方式创建了一个下午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偏移量?
答案 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