python - 为什么 pytz localize() 不生成一个 datetime 对象,其 tzinfo 与本地化它的 tz 对象相匹配?

标签 python datetime timezone pytz tzinfo

有没有人可以帮助我了解这里发生了什么?

import pytz
from datetime import datetime
tz = pytz.timezone('Europe/Berlin')
print repr(tz)
# <DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>
dt = datetime(2011, 1, 3, 18, 40)
result = tz.localize(dt)
print repr(result.tzinfo)
# <DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>
assert result.tzinfo == tz, "Why aren't these the same timezone?"

我的理解是 pytz timezone 对象上的 localize() 方法会采用一个简单的 datetime 对象,并添加一个 tzinfo 属性来匹配执行该操作的时区对象本土化。在这种情况下似乎没有发生这种情况。

显然,我对时区或 pytz 处理时区的方式有一些误解。谁能解释一下?

最佳答案

它们相同的时区 - “Europe/Berlin”

当您打印它们时,输出包括适用于该特定时间点的缩写和偏移量。

如果你检查 the tz data sources ,你会看到:

# Zone  NAME            GMTOFF   RULES       FORMAT   [UNTIL]
Zone    Europe/Berlin   0:53:28  -           LMT      1893 Apr
                        1:00     C-Eur       CE%sT    1945 May 24 2:00
                        1:00     SovietZone  CE%sT    1946
                        1:00     Germany     CE%sT    1980
                        1:00     EU          CE%sT

所以看起来当时区没有本地化日期时间时,它只使用第一个条目。

pytz 似乎也没有保留原始本地平均时间偏差的额外 28 秒 - 但这无关紧要,除非您使用的是 1893 年 4 月之前在柏林的日期。

关于python - 为什么 pytz localize() 不生成一个 datetime 对象,其 tzinfo 与本地化它的 tz 对象相匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24359540/

相关文章:

java - 如何使用正则表达式提取java方法参数

python - 匹配除三个连续双引号之外的所有内容

java - Spring DateTime Conversion服务异常

java - joda.time.DateTime 反序列化错误

python - 使用 st_mode 来识别文件或目录

python - 无法使用 anaconda 更新到 numpy 1.13?

c# - 解析 W7 和 Server 2012 R2 之间的日期差异

java - 如何将不同时区的日期字符串转换为一个时区中的日期对象

go - 如何使用特定时区解析时间

python - SQL Where 子句和 Django 时区