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
时区对象本地化的日期时间对象。
我有一个要求,我需要根据标准 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
时区对象本地化的日期时间对象。