Python 中给定 TimeZone 的标准 UTC 偏移量(无 DST)
Posted
技术标签:
【中文标题】Python 中给定 TimeZone 的标准 UTC 偏移量(无 DST)【英文标题】:Standard UTC offset (Without DST) for a give TimeZone in Python 【发布时间】:2021-02-09 12:08:34 【问题描述】:我有一个要求,例如,我需要根据标准 UTC 偏移(没有 DST)对多个时区代码进行分组 - 标准 UTC 偏移值在 4 到 6 之间的所有时区将是一组的一部分,所以一个.
如何使用时区代码获取时区的标准 UTC 偏移量?
我尝试了下面的方法,但它给了我 DST 的偏移量。
pytz.timezone('Asia/Jerusalem').localize(datetime.datetime(2011,1,1)).strftime('%z')
【问题讨论】:
什么是“标准 UTC 偏移量”?您知道时区在一年中的不同时间有不同的偏移量吗?您的用例是否意味着您可以获得某个特定时间点的偏移量?或者你想要……没有夏令时?standard UTC offset
是为该特定日期指定的。有些国家总是使用夏令时,有些国家总是使用冬令时,有些国家使用半小时,只是为了与邻国拥有不同的时区。尽管跨越 5 个时区,但中国使用相同的偏移量。
我怀疑您所说的standard UTC offset
是该特定国家/时区的基本偏移量,该国家/地区的法律仍然定义了该偏移量。只有nautical time 完全基于经度
@Panagiotis 如果某个时区总是使用相同的偏移量,那么术语“冬季”和“夏季时间”就没有任何意义。
@deceze 第二个选项,我需要没有 DST 的偏移值。
【参考方案1】:
您可以使用.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
时区对象本地化的日期时间对象。
【讨论】:
以上是关于Python 中给定 TimeZone 的标准 UTC 偏移量(无 DST)的主要内容,如果未能解决你的问题,请参考以下文章
python 使用Django单位中的自定义日期模拟/替换timezone.now()
如何计算红宝石中给定时区与 UTC 的偏移量(以小时为单位)?