python - 为什么我得到欧洲/柏林时区的偏移量 0:53?
问题描述
示例代码
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
问题
有人可以向我解释一下吗?
其他问题:
- 为什么 pytz localize() 不生成一个 tzinfo 与本地化它的 tz 对象匹配的 datetime 对象?只要求解释“代码的来源”。我的问题更偏向于:“为什么会这样?” - 我接受的答案很可能会包含一些历史。
解决方案
我不想说我可以这样解释它,但它被记录为不起作用。从pytz 主页:
该库仅支持两种构建本地化时间的方式。首先是使用
localize()
pytz库提供的方法。这用于本地化一个简单的日期时间(没有时区信息的日期时间)(例子)
构建本地化时间的第二种方法是使用标准方法转换现有的本地化时间
astimezone()
。(例子)
不幸的是,对于许多时区,使用标准 datetime 构造函数的 tzinfo 参数对 pytz “不起作用”。
>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt) '2002-10-27 12:00:00 LMT+0020'
但是对于没有夏令时转换的时区是安全的,例如 UTC
我怀疑 pytz 中时区的表示与 datetime 构造函数使用的内容不兼容。
我怀疑与其追逐确切的细节,不如接受它不起作用并使用建议的替代方案更实际。
推荐阅读
- ios - '#selector' 的参数不能引用全局函数(Swift)
- html - 始终将绝对定位元素置于响应元素之下
- java - minStack 子类使用一个对象作为最小堆栈和常规堆栈
- branch.io - 未应用分行推荐积分
- sql - 对特定日期之前的值求和
- javascript - 使用 Jquery 处理 JSON 数据
- mapbox - Mapbox 获取当前位置
- matlab - 在 MATLAB 中针对数组的奇数列绘制偶数列
- c++ - 'return' : 无法从 'const class myClass' 转换为 'class myClass &'
- css - 调整内容大小时,CSS容器不会同时增长