Используйте strptime()
из datetime.datetime
.
>>> from datetime import datetime, timezone, timedelta as td
>>> t = datetime.strptime('13:56:30 UTC-04:00', '%H:%M:%S UTC%z')
>>> tz = t.tzinfo
>>> t
datetime.datetime(1900, 1, 1, 13, 56, 30, tzinfo=datetime.timezone(datetime.td(days=-1, seconds=68400)))
>>> print(t)
1900-01-01 13:56:30-05:00
>>> tz
datetime.timezone(datetime.timedelta(days=-1, seconds=68400))
>>> print(t.astimezone(timezone.utc))
1900-01-01 18:56:30+00:00
Вы должны учитывать, что часовые пояса включают даты. Вы не можете анализировать текстовые представления временных отметок с часовыми поясами, не зная, какая дата это время в , поэтому пропуск даты (по умолчанию 1900-01-01) - это взлом , который вполне может сломаться . Вам нужно ввести правильную дату.
Использовать регулярное выражение.
import re
from datetime import timezone, timedelta as td
def parse_tz(tzstr):
p = re.compile('UTC([+-])(\d\d):(\d\d)')
m = p.search(tzstr)
if m:
sign = m.group(1)
try:
hs = m.group(2).lstrip('0')
ms = m.group(3).lstrip('0')
except:
return None
tz_offset = td(hours=int(hs) if hs else 0,
minutes=int(ms) if ms else 0)
return timezone(-tz_offset if sign == '-' else tz_offset)
tzstr = 'UTC+01:00'
parse_tz(tzstr)