Python时区:为什么EST减少一小时? pytz / dateutil

问题描述

我正在尝试在EST中打印当前时间,但是我的结果却偏离了一个小时(与Google的“最佳本地时间”和“ nyc本地时间”相比)。我尝试同时使用pytzdateutil

import datetime
import dateutil.tz
import pytz

# Correct
print(datetime.datetime.Now())

# Correct
print(datetime.datetime.Now(dateutil.tz.UTC))

# Off by one hour
print(str(datetime.datetime.Now(dateutil.tz.gettz("EST"))))

# Off by one hour
print(str(pytz.utc.localize(datetime.datetime.utcNow()).astimezone(pytz.timezone("EST"))))

我已经尝试研究执行此操作的正确方法,以上就是我所发现的结果,但结果不正确(例如,当Google表示上午11点时,它表示美国东部标准时间上午10点)。我的本地时间配置正确。我想念什么吗?

我正在使用:

解决方法

因为此时夏令时有效,所以您的时间减少了一个小时,而您指定EST时则不显示。

如问题注释中所述-您应使用基于特定地点的时区名称,例如America/New_York而不是EST

EST在pytz和dateutil中都起作用的原因是 被定义为IANA时区名称:

来自:https://github.com/eggert/tz/blob/2020a/northamerica#L188-L206

我们生成以下指定的文件,以防止使用 过期信息保留在时区二进制目录中。 我们将列表限制为以前版本中出现的名称 这个时区包...

# Zone  NAME     STDOFF  RULES  FORMAT  [UNTIL]
Zone    EST       -5:00  -      EST
Zone    MST       -7:00  -      MST
Zone    HST      -10:00  -      HST
Zone    EST5EDT   -5:00  US     E%sT
Zone    CST6CDT   -6:00  US     C%sT
Zone    MST7MDT   -7:00  US     M%sT
Zone    PST8PDT   -8:00  US     P%sT

如您所见,ESTMSTHST用固定的偏移量定义。他们没有遵守任何DST规则。没有PSTCST的类似条目,也没有EDT之类的日光变量。

名称为EST5EDT的时区向后兼容较早的POSIX风格的时区,但仅定义了这4个时区。

通常来说,您不应使用任何这些区域。他们只是在那里守卫。