将 1970 年之前的当地时间转换为 UTC

问题描述 投票:0回答:1

我正在尝试获取 1970 年之前日期的 UTC 时间,但 Python 中的

tz
tzinfo
仅包含 1970 年之后日期的时区数据库。

如果我尝试查找 1970 年之前的日期(例如比尔·克林顿的生日)的 UTC 时间:

1946 年 8 月 16 日上午 8:51 希望,AK

datetime
tzinfo
将返回
16 Aug 1946 13:51 UTC

但事实证明这是不正确的,因为它使用芝加哥的时区(它有自己的时区)

如何在 Python 中找到正确的时间转换并信任 1970 年之前的日期?

python datetime timezone epoch pytz
1个回答
1
投票

我们今天所知道的时区规则在 1900 年左右开始发挥作用,请参见P。 Eggert 的 tz 存储库。因此,比尔·克林顿的生日不应因缺少 tz 规则而受到影响。

例如,使用 pytz(已弃用):

from datetime import datetime
import pytz

bday = "August 16, 1946 8:51AM Hope, AR"
# Hope, AR is not a time zone, so strip it
bday = bday.rstrip(" Hope, AR")

# Hope in Arkansas uses US Central time, so we can use
tz = pytz.timezone("America/Chicago")

bday_dt = tz.localize(datetime.strptime(bday, "%B %d, %Y %I:%M%p"))

print(bday_dt)
# 1946-08-16 08:51:00-05:00
print(bday_dt.astimezone(pytz.UTC))
# 1946-08-16 13:51:00+00:00

...或使用 Python 3.9 的 zoneinfo

from zoneinfo import ZoneInfo

bday_dt = datetime.strptime(bday, "%B %d, %Y %I:%M%p").replace(tzinfo=ZoneInfo("America/Chicago"))

print(bday_dt)
# 1946-08-16 08:51:00-05:00
print(bday_dt.astimezone(ZoneInfo("UTC")))
# 1946-08-16 13:51:00+00:00
© www.soinside.com 2019 - 2024. All rights reserved.