Python 中给定时区的标准 UTC 偏移量(无 DST)

Standard UTC offset (Without DST) for a give TimeZone in Python

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

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

我试过下面的方法,但它给了我夏令时的偏移量。

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,1, tzinfo=ZoneInfo('Asia/Jerusalem'))
# 2011-01-01 00:00:00+02:00 
dt_DST = datetime(2011,6,1, 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 时区对象本地化的日期时间对象。