如何以"UTC+01:00"格式解析时区



我需要以以下格式解析时区说明:" 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)

最新更新