Python日期时间+;派茨问题

Python日期时间+;派茨问题,python,datetime,pytz,Python,Datetime,Pytz,我正在通过strtime创建一个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') >>&

我正在通过strtime创建一个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>)

编辑3:这可能是“在许多时区使用标准datetime构造函数的tzinfo参数”与pytz“不起作用”的一个实例

是的,问题出在

d.replace(tzinfo=pytz.timezone('Europe/Madrid'))
适用于马德里第一个已知的UTC偏移量(称为LMT=当地平均时间),比UTC晚15分钟(有效期至1900年),或者在这种情况下表示为
-1天+23:45

datetime.datetime(2016, 1, 2, 3, 4, 5, tzinfo=<DstTzInfo 'Europe/Madrid' LMT-1 day, 23:45:00 STD>)
相反:

datetime.datetime(2016, 1, 2, 3, 4, 5, tzinfo=<DstTzInfo 'Europe/Madrid' CET+1:00:00 STD>)
datetime.datetime(2016,1,2,3,4,5,tzinfo=)
将应用2016年有效的UTC补偿,即CE(S)T

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>)