Как я могу разобрать часовые пояса в формате «UTC + 01: 00» - PullRequest
1 голос
/ 12 мая 2019

Мне нужно проанализировать описания часовых поясов в следующем формате: «UTC + 01: 00».

Как мне этого добиться?

1 Ответ

2 голосов
/ 12 мая 2019

Используйте 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...