【问题标题】:Get UTC offset from time zone name in python从python中的时区名称获取UTC偏移量
【发布时间】:2011-07-29 02:46:15
【问题描述】:

如何从 python 中的时区名称中获取 UTC 偏移量?

例如:我有Asia/Jerusalem,我想得到+0200

【问题讨论】:

  • 对于 Python 3.9,您将使用 datetime.datetime.now(zoneinfo.ZoneInfo('Asia/Jerusalem')).utcoffset(),不需要任何第三方库。

标签: python


【解决方案1】:

由于 DST(夏令时),结果取决于一年中的时间:

import datetime, pytz

datetime.datetime.now(pytz.timezone('Asia/Jerusalem')).strftime('%z')

# returns '+0300' (because 'now' they have DST)


pytz.timezone('Asia/Jerusalem').localize(datetime.datetime(2011,1,1)).strftime('%z')

# returns '+0200' (because in January they didn't have DST)

【讨论】:

    【解决方案2】:

    您是否尝试过使用pytz 项目和utcoffset method

    例如

    >>> import datetime
    >>> import pytz
    >>> pacific_now = datetime.datetime.now(pytz.timezone('US/Pacific'))
    >>> pacific_now.utcoffset().total_seconds()/60/60
    -7.0
    

    【讨论】:

    • 顺便说一句,pytz 的 Ubuntu 包是 python-tz。
    • 我不敢对他投反对票,但 utcoffset 是日期时间对象的一种方法,据我所知,因此它不提供时区名称。
    • @Tom:它可用于tzinfo 对象。见pytz.sourceforge.net/#tzinfo-api
    • @jon-skeet 谢谢,我错过了。我们现在正式加强了吗?
    • 请注意,如果服务器使用的时区不是给定的时区,那么在夏令时切换期间会产生不正确的结果。传递给timezone.utcoffset() 的日期时间被假定为该时区的本地时间,如果超过夏令时开始或结束的时间,则将失败。 datetime.datetime.utcnow().replace(tzinfo=pytz.utc).astimezone(pytz.timezone('US/Pacific')).utcoffset().total_seconds() / 60 / 60 是更好的方法。
    【解决方案3】:

    我在从 python 日期时间对象转换为 UTC 时间戳时遇到了类似的问题。我的日期时间与时区无关(非常幼稚),因此astimezone 不起作用。

    为了缓解这个问题,我让我的 datetime 对象知道时区,然后使用上述魔法。

    import pytz
    system_tz = pytz.timezone(constants.TIME_ZONE)
    localized_time = system_tz.localize(time_of_meeting)
    fmt = "%Y%m%dT%H%M%S" + 'Z'
    return localized_time.astimezone(pytz.utc).strftime(fmt)
    

    在这里,constants.TIME_ZONE 是我的持久对象的默认时区。

    希望这有助于尝试将 python 日期时间对象转换为 UTC 的人。转换后,按您喜欢的方式格式化。

    【讨论】:

      猜你喜欢
      • 2016-05-07
      • 2017-08-30
      • 2016-09-05
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 2021-04-11
      • 2020-10-21
      • 1970-01-01
      相关资源
      最近更新 更多