Python pytz的奇怪时区问题

Python pytz的奇怪时区问题,python,pytz,Python,Pytz,时区和偏移量随年份而变化。pytz创建时区对象时提供的默认区域名称和偏移量是该区域最早可用的名称和偏移量,有时它们看起来有点奇怪。使用localize将分区附加到日期时,将替换正确的分区名称和偏移量。仅仅使用datetime构造函数将区域附加到日期不允许它正确调整。虽然我确信时区中的历史变化是一个因素,但将pytz时区对象传递给datetime构造函数会导致奇怪的行为,即使对于自开始以来未经历任何变化的时区也是如此 import pytz from datetime import datetim

时区和偏移量随年份而变化。pytz创建时区对象时提供的默认区域名称和偏移量是该区域最早可用的名称和偏移量,有时它们看起来有点奇怪。使用
localize
将分区附加到日期时,将替换正确的分区名称和偏移量。仅仅使用
datetime
构造函数将区域附加到日期不允许它正确调整。

虽然我确信时区中的历史变化是一个因素,但将pytz时区对象传递给datetime构造函数会导致奇怪的行为,即使对于自开始以来未经历任何变化的时区也是如此

import pytz
from datetime import datetime
hk = pytz.timezone('Asia/Hong_Kong')

dt1 = datetime(2012,1,1,tzinfo=hk)
dt2 = hk.localize(datetime(2012,1,1))
if dt1 > dt2:
   print "Why?"
产生

import datetime
import pytz 

dt = datetime.datetime(2020, 7, 15, 0, 0, tzinfo= pytz.timezone('US/Eastern'))
import datetime
import pytz 

dt = datetime.datetime(2020, 7, 15, 0, 0)
dt_local = timezone('US/Eastern').localize(dt)
创建datetime对象然后对其进行本地化会产生预期的结果

2020-07-15 00:00:00-04:56
产生

import datetime
import pytz 

dt = datetime.datetime(2020, 7, 15, 0, 0, tzinfo= pytz.timezone('US/Eastern'))
import datetime
import pytz 

dt = datetime.datetime(2020, 7, 15, 0, 0)
dt_local = timezone('US/Eastern').localize(dt)

精确有什么问题?1883年11月之前,美国没有任何标准时区;时间是本地的:。我预计时区数据库将返回纽约时间。如果查看来自的示例数据,您可以看到纽约在
1883年11月18日12:03:58
之前的偏移量为
4:56:02
。所以说纽约时区从未改变是不正确的。我被纠正了。这可以解释1883年datetimes的这种行为,但不是2020年看到我的答案。tzinfo对象不知道要使用它的日期,除非您使用
本地化
。出于某种原因,pytz假设1883年的可能性与2020年一样。这是真的,但仍然有理由期望datetime使用传递给其构造函数的数据参数来适当地使用传递的时区对象。