Python 3.x Python strTime无法理解时区偏移

Python 3.x Python strTime无法理解时区偏移,python-3.x,strptime,Python 3.x,Strptime,我需要解析一个非常简单的时间戳: 10/2/2020 3:19:42 PM (UTC-7) 但是使用python 3.6,当我试图解析它时,我得到以下结果: >>> datetime.strptime('10/2/2020 3:19:42 PM (UTC-7)', '%m/%d/%Y %I:%M:%S %p (%Z%z)') Traceback (most recent call last): File "<stdin>", line 1,

我需要解析一个非常简单的时间戳:

10/2/2020 3:19:42 PM (UTC-7)
但是使用python 3.6,当我试图解析它时,我得到以下结果:

>>> datetime.strptime('10/2/2020 3:19:42 PM (UTC-7)', '%m/%d/%Y %I:%M:%S %p (%Z%z)')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_strptime.py", line 565, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "_strptime.py", line 362, in _strptime
    (data_string, format))
ValueError: time data '10/2/2020 3:19:42 PM (UTC-7)' does not match format '%m/%d/%Y %I:%M:%S %p (%Z%z)'
>>datetime.strtime('10/2/2020 3:19:42 PM(UTC-7)',%m/%d/%Y%I:%m:%S%p(%Z%Z)'))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“\u strtime.py”,第565行,在\u strtime\u datetime中
tt,分数=_strtime(数据字符串,格式)
文件“_strtime.py”,第362行,在_strtime中
(数据字符串,格式))
ValueError:时间数据“10/2/2020 3:19:42 PM(UTC-7)”与格式“%m/%d/%Y%I:%m:%S%p(%Z%Z)”不匹配
我尝试了
dateutil.parser
,以及格式字符串的几种变体。跳起来的片段是
(UTC-7)
部分

字符串格式是否错误?如何解析此字符串并同时接收时区信息?感谢您的帮助

编辑:如果字符串为(UTC-0700),则解析工作。但我无法控制时间戳的格式,有没有办法以当前格式(UTC-7)解析它们?

啊,结果证明这很愚蠢:

>>> import dateutil
>>> dateutil.parser.parse(dt, fuzzy=True)
datetime.datetime(2020, 10, 2, 15, 19, 42, tzinfo=tzoffset(None, 25200))
之前应使用模糊逻辑。:-)

编辑:上述操作不起作用(感谢@wim指出它)-模糊标志忽略偏移字符串的符号

以下是有效的代码:

>>> from datetime import datetime
>>> import re
>>> dt = '10/2/2020 3:19:42 PM (UTC-7)'
>>> sign, offset = re.search('\(UTC([+-])(\d+)\)', dt).groups()
>>> offset = f"0{offset}00" if len(offset) == 1 else f"{offset}00"
>>> dt = re.sub(r'\(UTC.\d+\)', f'(UTC{sign}{offset})', dt)
>>> datetime.strptime(dt, '%m/%d/%Y %I:%M:%S %p (%Z%z)')
datetime.datetime(2020, 10, 2, 15, 19, 42, tzinfo=datetime.timezone(datetime.timedelta(-1, 61200), 'UTC'))
啊,原来很傻,

>>> import dateutil
>>> dateutil.parser.parse(dt, fuzzy=True)
datetime.datetime(2020, 10, 2, 15, 19, 42, tzinfo=tzoffset(None, 25200))
之前应使用模糊逻辑。:-)

编辑:上述操作不起作用(感谢@wim指出它)-模糊标志忽略偏移字符串的符号

以下是有效的代码:

>>> from datetime import datetime
>>> import re
>>> dt = '10/2/2020 3:19:42 PM (UTC-7)'
>>> sign, offset = re.search('\(UTC([+-])(\d+)\)', dt).groups()
>>> offset = f"0{offset}00" if len(offset) == 1 else f"{offset}00"
>>> dt = re.sub(r'\(UTC.\d+\)', f'(UTC{sign}{offset})', dt)
>>> datetime.strptime(dt, '%m/%d/%Y %I:%M:%S %p (%Z%z)')
datetime.datetime(2020, 10, 2, 15, 19, 42, tzinfo=datetime.timezone(datetime.timedelta(-1, 61200), 'UTC'))

嗯,我不认为strtime可以解析那个区域,你可能需要手动解析。嗯,我不认为strtime可以解析那个区域,你现在可能需要手动解析。看起来这不正确地将其解析为+07:00偏移量。我想你想要一个-07:00的偏移量。谢谢你的关注!关于如何在不恢复手动解析的情况下修复此问题,您有什么想法吗?没有,正如我在问题上所评论的,您可能需要手动解析。现在请小心。看起来这不正确地将其解析为+07:00偏移量。我想你想要一个-07:00的偏移量。谢谢你的关注!关于如何在不恢复手动解析的情况下修复此问题,您有什么想法吗?没有,正如我对您可能需要手动解析的问题所做的评论。