Что является более элегантным способом извлечения смещения часового пояса в pytz? - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть немного кода, который использует datetime, pytz и re для определения смещения UTC для данного часового пояса в виде datetime.timedelta объекта:

def get_utcoffset(mic, date):
    that_day = datetime.datetime.combine(date, datetime.time())
    tzone = pytz.timezone(timezones[mic]) # e.g. pytz.timezone("Asia/Tokyo")
    offset_string = tzone.localize(that_day).strftime("%z")
    pattern = "^(.)(\\d{2})(\\d{2})$"
    captured = re.search(pattern, offset_string)
    sign = captured.group(1)
    hh = int(captured.group(2))
    mm = int(captured.group(3))
    if sign == "-":
        return datetime.timedelta(hours=-hh, minutes=-mm)
    return datetime.timedelta(hours=hh, minutes=mm)

Похоже, должен быть более элегантный и эффективный способ сделать это, так как pytz.timezone.localize должен знать о своих собственных смещениях относительно UTC.Кажется бесполезным извлекать значения смещения в виде строки, а затем использовать регулярное выражение, чтобы по существу сканировать строку.

Как мы можем улучшить этот код?

1 Ответ

0 голосов
/ 04 декабря 2018

Если вы посмотрите документацию для объектов Python tzinfo , вы увидите метод с именем utcoffset.Это даст вам смещение напрямую.

delta = tzone.utcoffset(that_day)
return delta

Редактировать: нет необходимости вызывать localize для datetime, объект pytz делает это сам как часть utcoffset.Ожидается, что будет передано наивное время.

...