2013年6月1日,我预计“pst8pdt”时区的运行方式与格林尼治标准时间+7类似,因为这是该时区的夏令时。但是,它的表现类似于格林尼治标准时间+8:
>>> import pytz, datetime
>>> Pacific = pytz.timezone("PST8PDT")
>>> datetime.datetime(2013, 6, 1, 12, tzinfo=Pacific).astimezone(pytz.utc)
datetime.datetime(2013, 6, 1, 20, 0, tzinfo=<UTC>)
相比之下,2013年1月1日,它的表现(正确)与格林尼治标准时间+8:
>>> datetime.datetime(2013, 1, 1, 12, tzinfo=Pacific).astimezone(pytz.utc)
datetime.datetime(2013, 1, 1, 20, 0, tzinfo=<UTC>)
我做错什么了?事先谢谢!
最佳答案
您不能在datetime
构造函数中分配时区,因为它不能给时区对象一个调整夏令时的机会-该日期不可访问。这给世界上某些地区带来了更多的问题,这些地区的时区名称和偏移量多年来一直在变化。
从pytz
documentation开始:
不幸的是,对于许多时区,使用标准datetime构造函数的tzinfo参数“不适用于”pytz。
将localize
方法与naive datetime一起使用。
>>> Pacific.localize(datetime.datetime(2013, 6, 1, 12)).astimezone(pytz.utc)
datetime.datetime(2013, 6, 1, 19, 0, tzinfo=<UTC>)
>>> Pacific.localize(datetime.datetime(2013, 1, 1, 12)).astimezone(pytz.utc)
datetime.datetime(2013, 1, 1, 20, 0, tzinfo=<UTC>)
关于python - pytz.astimezone不考虑夏令时?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18862683/