使用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查找时区时差的主要内容,如果未能解决你的问题,请参考以下文章