У меня есть немного кода, который использует 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.Кажется бесполезным извлекать значения смещения в виде строки, а затем использовать регулярное выражение, чтобы по существу сканировать строку.
Как мы можем улучшить этот код?