【问题标题】:Find timezone time difference using pytz使用pytz查找时区时差
【发布时间】:2018-09-05 21:37:37
【问题描述】:

我正在创建一个不包含时区信息的简单日期时间对象,但我知道它始终采用 UTC。我想计算我定义的任何时区的本地时间和 UTC 之间的时差,这也将考虑 DST。

我正在做的事情如下:

from datetime import datetime, timedelta

now = datetime(2018,3,27,15,20)           #Create a naive datetime object
now_utc = timezone("UTC").localize(now)   # Add UTC timezone information to it
now_madrid = now_utc.astimezone(timezone("Europe/Madrid")) # convert to Madrid timezone

通常,如果我要计算两个日期时间对象之间的时间差,我会减去它们。但是当我尝试 diff = now_utc - now_madrid 时,结果如下:

In [275]: now_utc-now_madrid
Out[275]: datetime.timedelta(0)

谁能告诉我,在这种情况下如何找到时区差异?提前谢谢你:)

【问题讨论】:

    标签: python-3.x datetime timedelta pytz


    【解决方案1】:

    时间增量为“0”,因为马德里比 UTC 早 2 小时。

    now_utc-now_madrid
    

    当您像这样减去它时,意味着它位于 UTC 之后的另一个时区。

    也许有更有效的方法,但我会这样做。

    >>> import pytz
    >>> import datetime
    >>> utc_now = pytz.utc.localize(datetime.datetime.utcnow ())
    >>> utc_now
    datetime.datetime(2018, 3, 27, 19, 11, 19, 659257, tzinfo=<UTC>)
    
    >>> madrid_now = utc_now.astimezone(pytz.timezone ('Europe/Madrid'))
    >>> madrid_now
    datetime.datetime(2018, 3, 27, 21, 11, 19, 659257, tzinfo=<DstTzInfo 'Europe/Madrid' CEST+2:00:00 DST>)
    

    如您所见,时区转换已经由 tzinfo CEST+2:00:00 DST提供。

    如果您需要对该值进行任何算术运算,请尝试:

    >>> utc_now + timedelta (hours = 2)  # Since Madrid is +2:00:00 hours
    datetime.datetime(2018, 3, 27, 21, 11, 19, 659257, tzinfo=<UTC>)
    

    或者从strftime中提取偏移时区差异。

    >>> madrid_now.strftime ('%z')
    '+0200'
    

    您可以在此处找到更多阅读内容: http://pytz.sourceforge.net/

    【讨论】:

      猜你喜欢
      • 2020-08-26
      • 2018-01-03
      • 2021-01-17
      • 2013-08-30
      • 2015-02-24
      • 2019-04-06
      • 2012-08-29
      • 2015-02-16
      • 2015-06-13
      相关资源
      最近更新 更多