【问题标题】:How to compare two timezone strings?如何比较两个时区字符串?
【发布时间】:2021-07-05 15:04:06
【问题描述】:

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

例如:

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

print(hours) # -> 3

【问题讨论】:

标签: python timezone timezone-offset


【解决方案1】:

这应该可行。 这是一个关于时区和日期时间的精彩博客: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

【讨论】:

    【解决方案2】:

    仅供参考: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) 的固定日期时间,所以它可能会在以下情况下关闭区域遵守 DST 而另一个则不遵守。考虑到这一点,您也许可以使用当前时间戳作为参考日期。

    【讨论】:

    • 太棒了!我不知道 dateutil。
    猜你喜欢
    • 2022-06-29
    • 2019-01-14
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多