为什么我获得时区欧洲/柏林的偏移0:53?

时间:2018-05-21 06:39:59

标签: python python-3.x datetime timezone pytz

示例代码

from datetime import datetime, timezone
import pytz

tzstring = 'Europe/Berlin'
t1 = datetime(2016, 6, 16, 2, 0, tzinfo=pytz.timezone(tzstring))
t2 = datetime(2016, 6, 16, 2, 0, tzinfo=timezone.utc).astimezone(pytz.timezone(tzstring))

观察到的

print(t1): 2016-06-16 02:00:00+00:53
print(t2): 2016-06-16 04:00:00+02:00

预期

print(t1): 2016-06-16 04:00:00+02:00  # does not match expectation
print(t2): 2016-06-16 04:00:00+02:00  # matches expectation

问题

有人可以向我解释一下吗?

其他问题:

1 个答案:

答案 0 :(得分:3)

我不想说我可以解释它,但 记录不起作用。来自pytz home page

  

此库仅支持两种构建本地化时间的方法。第一种是使用pytz库提供的localize()方法。这用于本地化一个天真的日期时间(没有时区信息的日期时间)

     

(实施例)

     

构建本地化时间的第二种方法是使用标准astimezone()方法转换现有的本地化时间。

     

(实施例)

     

不幸的是,使用标准日期时间构造函数的tzinfo参数'对于许多时区而言不适用于pytz。

>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt)
'2002-10-27 12:00:00 LMT+0020'
     

对于没有夏令时转换的时区,例如UTC

,这是安全的

我怀疑pytz中时区的表示与datetime构造函数的使用不兼容。

我怀疑接受它不起作用并使用建议的替代方案,而不是追逐确切的细节,而不是追逐确切的细节。