使用pytz查找时区时差

Find timezone time difference using pytz

我正在创建一个不包含时区信息的原始日期时间对象,但我知道它始终采用 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)

任何人都可以告诉我,在这种情况下我如何找到时区差异?提前谢谢你:)

时间增量为“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/