使用pytz查找时区时差

Posted

技术标签:

【中文标题】使用pytz查找时区时差【英文标题】:Find timezone time difference using 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)

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

【问题讨论】:

【参考方案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/

【讨论】:

以上是关于使用pytz查找时区时差的主要内容,如果未能解决你的问题,请参考以下文章

在python中获取系统本地时区

pytz 时区的 STD 偏移量

如何从 html 输入表单中使用 php 查找时差

pytz 替代方案 - 使用操作系统时区作为源?

使用pytz的python时区转换问题

使用 pytz 获取时区的国家代码?