【问题标题】:Standard UTC offset (Without DST) for a give TimeZone in PythonPython 中给定 TimeZone 的标准 UTC 偏移量(无 DST)
【发布时间】: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 的偏移值。

标签: python python-3.x datetime timezone-offset pytz


【解决方案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 时区对象本地化的日期时间对象。

【讨论】:

    最近更新 更多