python-3.x 将本地时间转换为带区域的UTC时间

vdzxcuhz  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(119)

你好,我正在尝试从本地时间获取UTC时间。我该如何进行?

import datetime as dt
import zoneinfo
from functools import lru_cache

@lru_cache(maxsize=None)
def list_timezones():
    return zoneinfo.available_timezones()

date_str = "Mon, 29 Apr 2019 10:43:55 Asia/Shanghai"

if any((match_tz := tz) in date_str for tz in list_timezones()):
    date_str_nozone = date_str.replace(match_tz, "").strip()
    date_frmt = "%a, %d %b %Y %H:%M:%S"
    naive_time = dt.datetime.strptime(date_str_nozone, date_frmt)

字符串
match_tz从date字符串中提取region/city,naive time给出2019-04-29 10:43:55
现在我需要从match_tz获取UTC偏移量,并在naive_time上使用它将其转换为UTC时间。
我不想依赖pytz,因为它在最近的python版本中已经被弃用了。
谢谢你,谢谢

fjaof16o

fjaof16o1#

你把这件事变得比必要的更困难。你不应该自己做任何逻辑,甚至不应该从原始字符串中剥离时区。相反,利用现有的库来为你做一切。
首先将时间戳字符串解析为datetime:

timestamp_local = dt.datetime.strptime(date_str)

字符串
然后转换时区:

timestamp_utc = timestamp_local.astimezone(tz=zoneinfo.utc)


然后在准备好显示它时将其格式化为字符串:

print(timestamp_utc.strftime(date_frmt))


确保将date_frmt更改为包含时区的格式化程序。
请参阅How to convert a UTC datetime to a local datetime using only standard library?了解更多详细信息。

相关问题