在Python中,从时区获取UTC偏移量的正确方法是什么? 我需要一个函数,输入一个pytz时区,然后输出该时区的偏移量,忽略夏令时。
import pytz
tz = pytz.timezone('Europe/Madrid')
getOffset(tz) #datetime.timedelta(0, 3600)
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)
同时也很好地与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
timestamp
,因为许多时区在过去的几年中已经更改了它们的标准时间。 - Matt Johnson-Pint