【发布时间】:2021-07-05 15:04:06
【问题描述】:
是否有一些库或内置来比较两个时区?我想要的是两个时区之间的小时偏移量
例如:
hours = diff_timezones("America/Los_Angeles", "America/Sao_Paulo")
print(hours) # -> 3
【问题讨论】:
标签: python timezone timezone-offset
是否有一些库或内置来比较两个时区?我想要的是两个时区之间的小时偏移量
例如:
hours = diff_timezones("America/Los_Angeles", "America/Sao_Paulo")
print(hours) # -> 3
【问题讨论】:
标签: python timezone timezone-offset
这应该可行。 这是一个关于时区和日期时间的精彩博客: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
【讨论】:
仅供参考:Python 3.9+ 在其标准库中附带 zoneinfo,而 dateutil(如下)是 PyPI 上提供的第三方软件包 python-dateutil。
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) 的固定日期时间,所以它可能会在以下情况下关闭区域遵守 DST 而另一个则不遵守。考虑到这一点,您也许可以使用当前时间戳作为参考日期。
【讨论】: