如何比较两个时区字符串?

How to compare two timezone strings?

是否有一些库或内置的来比较两个时区?我想要的是两个时区之间的小时偏移

例如:

hours = diff_timezones("America/Los_Angeles", "America/Sao_Paulo")

print(hours) # -> 3

仅供参考:Python 3.9+ 在其标准库中附带 zoneinfo,而 dateutil(下方)是 PyPI 上可用的第三方包 python-dateutil.


使用dateutil.tz.gettz

from datetime import datetime, timedelta
from dateutil.tz import gettz

def diff_timezones(tz1: str, tz2: str) -> timedelta:
    zero = datetime.utcfromtimestamp(0)
    diff = zero.replace(tzinfo=gettz(tz1)) - zero.replace(tzinfo=gettz(tz2))
    return diff

示例用法:

>>> diff_timezones('America/Los_Angeles', 'America/Sao_Paulo')
datetime.timedelta(seconds=18000)

这里的结果是一个 datetime.timedelta 实例。要获得浮动时间:

>>> td.total_seconds() / (60 * 60)
5.0

注意:我认为这不会考虑 DST,因为它使用 Unix 纪元 (1970-01-01) 的固定日期时间,所以它可能是在一个区域遵守夏令时而另一个区域不遵守的情况下关闭。考虑到这一点,您或许可以使用当前时间戳作为参考日期。

这应该有效。 这是一篇关于时区和日期时间的精彩博客:Blog

import datetime, pytz


d_naive = datetime.datetime.now()

timezone_a = pytz.timezone("America/Los_Angeles")
timezone_b = pytz.timezone("America/New_York")

d_aware_a = timezone_a.localize(d_naive)
d_aware_b = timezone_b.localize(d_naive)

difference =  d_aware_a - d_aware_b

print(difference.total_seconds() / 60 / 60 ) # seconds / minutes