用pytz提取时区偏移的更优雅的方法是什么?

时间:2018-12-04 02:01:04

标签: python timezone pytz

我有一些代码使用datetime对象的形式使用pytzredatetime.timedelta来确定给定时区的UTC偏移量:

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的偏移量,因此似乎应该有一种更优雅,更有效的方法。将偏移量值提取为字符串,然后使用regex本质上对字符串进行扫描似乎很浪费。

我们如何使这段代码更好?

1 个答案:

答案 0 :(得分:1)

如果您查看documentation for Python tzinfo objects,将看到一个名为utcoffset的方法。这将直接为您提供补偿。

delta = tzone.utcoffset(that_day)
return delta

编辑:不需要在localize上调用datetimepytz对象本身就是utcoffset的一部分。预计会过一个幼稚的日期时间。