我有一些代码使用datetime
对象的形式使用pytz
,re
和datetime.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本质上对字符串进行扫描似乎很浪费。
我们如何使这段代码更好?
答案 0 :(得分:1)
如果您查看documentation for Python tzinfo
objects,将看到一个名为utcoffset
的方法。这将直接为您提供补偿。
delta = tzone.utcoffset(that_day)
return delta
编辑:不需要在localize
上调用datetime
,pytz
对象本身就是utcoffset
的一部分。预计会过一个幼稚的日期时间。