我通过strptime创建了一个datetime对象,通过pytz在“欧洲/马德里”时区中设置为"2016-01-02 03:04:05“。然后我把它转换成UTC。
为什么是加15分钟而不是减1小时?
>>> import datetime
>>> import pytz
>>> d = datetime.datetime.strptime('2016-01-02 03:04:05', '%Y-%m-%d %H:%M:%S')
>>> d
datetime.datetime(2016, 1, 2, 3, 4, 5)
>>> d = d.replace(tzinfo=pytz.timezone('Europe/Madrid'))
>>> d
datetime.datetime(2016, 1, 2, 3, 4, 5, tzinfo=<DstTzInfo 'Europe/Madrid' LMT-1 day, 23:45:00 STD>)
>>> d.astimezone(pytz.utc)
datetime.datetime(2016, 1, 2, 3, 19, 5, tzinfo=<UTC>)如果我使用“CET”而不是“欧洲/马德里”,它可以正常工作:
>>> d = d.replace(tzinfo=pytz.timezone('CET'))
>>> d
datetime.datetime(2016, 1, 2, 3, 4, 5, tzinfo=<DstTzInfo 'CET' CET+1:00:00 STD>)
>>> d.astimezone(pytz.utc)
datetime.datetime(2016, 1, 2, 2, 4, 5, tzinfo=<UTC>)编辑1: Python版本为2.7.11。pytz版本是2015.7。
编辑2:可能的解决方案是使用d = pytz.timezone('Europe/Madrid').localize(d)代替d = d.replace(tzinfo=pytz.timezone('Europe/Madrid'))
>>> d = datetime.datetime.strptime('2016-01-02 03:04:05', '%Y-%m-%d %H:%M:%S')
>>> d
datetime.datetime(2016, 1, 2, 3, 4, 5)
>>> d = pytz.timezone('Europe/Madrid').localize(d)
>>> d
datetime.datetime(2016, 1, 2, 3, 4, 5, tzinfo=<DstTzInfo 'Europe/Madrid' CET+1:00:00 STD>)
>>> d.astimezone(pytz.utc)
datetime.datetime(2016, 1, 2, 2, 4, 5, tzinfo=<UTC>)编辑3:也许这是“在许多时区使用标准datetime构造函数的tzinfo参数对pytz不起作用”的一个实例?Source
发布于 2019-07-29 14:55:41
是的,问题出在
d.replace(tzinfo=pytz.timezone('Europe/Madrid'))其中,它应用在马德里的第一个已知的协调世界时的偏移量(称为LMT =本地标准时间),其比协调时晚15分钟(有效到1900年),或者在这种情况下表示为-1 day +23:45
datetime.datetime(2016, 1, 2, 3, 4, 5, tzinfo=<DstTzInfo 'Europe/Madrid' LMT-1 day, 23:45:00 STD>)使用
pytz.timezone('Europe/Madrid').localize(d)而是:
datetime.datetime(2016, 1, 2, 3, 4, 5, tzinfo=<DstTzInfo 'Europe/Madrid' CET+1:00:00 STD>)将应用2016年有效的UTC偏移量,即CE(S)T。
https://stackoverflow.com/questions/35631578
复制相似问题