首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pytz查找时区时差

使用pytz查找时区时差
EN

Stack Overflow用户
提问于 2018-03-27 12:58:18
回答 1查看 2.1K关注 0票数 2

我正在创建一个天真的datetime对象,它不包含时区信息,但我知道它总是在UTC中。我想为我定义的任何时区计算本地时间和UTC之间的时间差,这也会考虑到DST。

因此,我要做的是:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
In [275]: now_utc-now_madrid
Out[275]: datetime.timedelta(0)

有谁能告诉我,在这种情况下,我怎么能找到时差呢?(预先谢谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-27 20:00:11

时间三角洲是"0“,因为马德里是世界协调时2小时的负责人。

代码语言:javascript
复制
now_utc-now_madrid

当你像这样减去它,就意味着它在UTC后面的另一个时区。

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

代码语言:javascript
复制
>>> 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提供。

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

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

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

代码语言:javascript
复制
>>> madrid_now.strftime ('%z')
'+0200'

您可以在这里找到更多的阅读:http://pytz.sourceforge.net/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49513539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档