Python中给定TimeZone的标准UTC偏移量无DST

问题描述

我有一个要求,我需要根据标准的UTC偏移量(不带DST)对几个时区代码进行分组-例如,所有标准UTC偏移值在4到6之间的时区都将属于一组,所以一个

如何使用时区代码获取时区的标准UTC偏移量?

我尝试了下面的方法,但是它给了我DST的偏移量。

pytz.timezone('Asia/Jerusalem').localize(datetime.datetime(2011,1,1)).strftime('%z')

解决方法

您可以使用.dst()方法;它为您提供DST的时间增量。如果从.utcoffset()中减去,您将获得时区的“标准” UTC偏移量。

from datetime import datetime
from zoneinfo import ZoneInfo

dt_woDST = datetime(2011,1,tzinfo=ZoneInfo('Asia/Jerusalem'))
# 2011-01-01 00:00:00+02:00 
dt_DST = datetime(2011,6,tzinfo=ZoneInfo('Asia/Jerusalem'))
# 2011-06-01 00:00:00+03:00

utcoff0 = (dt_woDST.utcoffset()-dt_woDST.dst()).total_seconds()
utcoff1 = (dt_DST.utcoffset()-dt_DST.dst()).total_seconds()

print(utcoff0,utcoff0 == utcoff1)
# 7200.0 True

注意:我在这里使用Python 3.9的zoneinfo;当然,这也适用于您使用pytz时区对象本地化的日期时间对象。