从时区中获取Python的时区偏移量,忽略夏令时

3

在Python中,从时区获取UTC偏移量的正确方法是什么? 我需要一个函数,输入一个pytz时区,然后输出该时区的偏移量,忽略夏令时。

import pytz
tz = pytz.timezone('Europe/Madrid')
getOffset(tz) #datetime.timedelta(0, 3600)
2个回答

6

pytz 时区对象遵循 datetime 模块中定义的 tzinfo API 规范。 因此,您可以使用它们的 .utcoffset().dst() 方法:

timestamp = datetime(2009, 1, 1)  # any unambiguous timestamp will work here

def getOffset(tz):
    return tz.utcoffset(timestamp) - tz.dst(timestamp)

2
很好的回答。需要注意的是为什么仍然需要timestamp,因为许多时区在过去的几年中已经更改了它们的标准时间。 - Matt Johnson-Pint
1
非常有用。谢谢! - Manu Mora

0

同时也很好地与Python 3.9的zoneinfo.ZoneInfo配合使用:

from datetime import datetime, timedelta
from zoneinfo import ZoneInfo

def utc_offset_no_dst(dt: datetime, tz: ZoneInfo) -> timedelta:
    return tz.utcoffset(dt) - tz.dst(dt)

z = "Europe/Berlin" # +1 (DST=0) / +2 (DST=1)
tz = ZoneInfo(z)

for dt in datetime(2022,1,15), datetime(2022,6,15):
    print(utc_offset_no_dst(dt, tz))
    
# 1:00:00
# 1:00:00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接