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

2023-11-22

示例代码

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

Observed

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

Expected

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

Question

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

其他问题:

  • 为什么 pytz localize() 不生成一个 tzinfo 与本地化它的 tz 对象相匹配的日期时间对象?只要求解释“它来自代码的哪里”。我的问题更多的是:“为什么会这样?” - 我接受的答案中很可能会包含一些历史。

我不想说我可以这样解释,但它is记录为无效。来自皮兹主页:

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

(例子)

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

(例子)

不幸的是,对于许多时区,使用标准日期时间构造函数的 tzinfo 参数对 pytz 来说“不起作用”。

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

对于没有夏令时转换的时区来说是安全的,例如 UTC

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

我认为,与其追求确切的细节,不如接受它不起作用并使用建议的替代方案更为实际。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么欧洲/柏林时区的偏移量为 0:53? 的相关文章

随机推荐