我需要以以下格式解析时区说明:" utc 01:00"。
我该如何实现?
使用
datetime.datetime
。
strptime()
>>> 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(的情况下,将时间戳的文本表示形式解析为时区,因此很可能会破坏。您需要注入适当的日期。
使用Regex。
import re
from datetime import timezone, timedelta as td
def parse_tz(tzstr):
p = re.compile('UTC([+-])(dd):(dd)')
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)