你好,我正在尝试从本地时间获取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版本中已经被弃用了。
谢谢你,谢谢
1条答案
按热度按时间fjaof16o1#
你把这件事变得比必要的更困难。你不应该自己做任何逻辑,甚至不应该从原始字符串中剥离时区。相反,利用现有的库来为你做一切。
首先将时间戳字符串解析为datetime:
字符串
然后转换时区:
型
然后在准备好显示它时将其格式化为字符串:
型
确保将
date_frmt
更改为包含时区的格式化程序。请参阅How to convert a UTC datetime to a local datetime using only standard library?了解更多详细信息。