【问题标题】:Calculate hours difference between timezone and UTC based timezone name in following format: America/New_York按以下格式计算时区和基于 UTC 的时区名称之间的小时差:America/New_York
【发布时间】:2021-10-30 05:33:44
【问题描述】:

我有一个库,它以以下格式返回某个位置的时区:America/New_York。根据该时区名称,我想计算该时区和 UTC 之间的小时数,同时考虑夏令时和所有时间。我正在使用 Python。

我的第一个想法是使用 Google python 库并搜索“America/New_York time”,但这只给了我一个网址列表,我可以访问这些网址以自己获取信息。如果我能在谷歌中手动搜索“美国/纽约时间”,直接进入我的程序,就能看到当前时间,那就太棒了。

我确定这个问题之前已经被问过,但我是堆栈溢出和 python 的新手,因此非常感谢您的帮助。

谢谢!

【问题讨论】:

    标签: python


    【解决方案1】:

    与 UTC 的偏移量取决于日期(因为夏令时可能有效也可能无效)。所以你需要提供一个日期时间来进行比较。

    ZoneInfo.utcoffset 会直接返回一个 timedelta 对象。

    >>> from zoneinfo import ZoneInfo
    >>> from datetime import datetime
    >>> ZoneInfo("America/New_York").utcoffset(datetime(2021, 10, 23)) #EDT
    datetime.timedelta(days=-1, seconds=72000)
    >>> ZoneInfo("America/New_York").utcoffset(datetime(2021, 11, 15)) #EST
    datetime.timedelta(days=-1, seconds=68400)
    >>> ZoneInfo("Asia/Tokyo").utcoffset(datetime(2021, 10, 23))
    datetime.timedelta(seconds=32400)
    

    【讨论】:

      【解决方案2】:

      不是一个完整的答案,但也许你可以实现一个字典,用三个字母将这些格式连接到正常格式。有了这个,您就可以使用 datetime 和 pytz 来完成其余的工作。如果当前格式没有太多可能的输出,这将是可行的,否则当然不行。

      【讨论】:

        【解决方案3】:
        >>> from datetime import datetime, timedelta
        >>> from datetime import timezone
        >>> from zoneinfo import ZoneInfo
        >>> dt1 = datetime(2020, 11, 1, 8, tzinfo=timezone.utc)
        >>> dt2 = datetime(2020, 11, 1, 8, tzinfo=ZoneInfo("America/New_York"))
        >>> dt2 - dt1
        datetime.timedelta(seconds=18000)
        >>> 
        

        请注意,根据夏令时是否有效,差异将是 4 个 5 小时。

        【讨论】:

          猜你喜欢
          • 2012-04-09
          • 2017-04-29
          • 1970-01-01
          • 1970-01-01
          • 2015-01-26
          • 1970-01-01
          • 2016-09-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多