Python strptime 解析时区格式"GMT+-H"

Python strptime parse timezone format "GMT+-H"

我正在使用 python 3.7 并试图找出正确的格式来使此代码正常工作

dt = datetime.strptime("4 January 2022, 22:03 GMT-5", "%-d %b %Y, %H:%M %Zz")

上面一行总是失败。我可以做些什么来解析它吗?我假设它在“GMT-5 部分”失败

编辑: 添加上下文,输入字符串是从网站上抓取的,因此我需要找到一种方法将其转换为 python 日期时间对象,以便代码可以了解事件发生的时间。我不太确定如何“在代码中”更改输入以匹配所需的 strptime

格式

您使用了错误的月份格式和无效的 UTC 偏移文本(它必须是四位数,如 documentation 中所述):

>>> datetime.datetime.strptime("4 January 2022, 22:03 GMT-0500", "%d %B %Y, %H:%M %Z%z")
datetime.datetime(2022, 1, 4, 22, 3, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), 'GMT'))

%z 解析指令不会解析仅小时的 UTC 偏移量(docs:需要 ±HHMM[SS[.ffffff]] 形式)。但是您可以从 timedelta 派生一个时区对象并将其设置为

from datetime import datetime, timedelta, timezone

s = "4 January 2022, 22:03 GMT-5"

parts = s.split('GMT')

dt = (datetime.strptime(parts[0].strip(), "%d %B %Y, %H:%M") # parse to datetime w/o offset
          .replace(tzinfo=timezone(timedelta(hours=int(parts[1]))))) # add UTC offset

print(dt)
# 2022-01-04 22:03:00-05:00