我正在尝试获取 1970 年之前日期的 UTC 时间,但 Python 中的
tz
和 tzinfo
仅包含 1970 年之后日期的时区数据库。
如果我尝试查找 1970 年之前的日期(例如比尔·克林顿的生日)的 UTC 时间:
1946 年 8 月 16 日上午 8:51 希望,AK
datetime
和 tzinfo
将返回 16 Aug 1946 13:51 UTC
但事实证明这是不正确的,因为它使用芝加哥的时区(它有自己的时区)
如何在 Python 中找到正确的时间转换并信任 1970 年之前的日期?
我们今天所知道的时区规则在 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