我正在创建一个天真的datetime对象,它不包含时区信息,但我知道它总是在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通常,如果要计算两个datetime对象之间的时间差,就会减去它们。但是,当我尝试diff = now_utc - now_madrid时,结果如下:
In [275]: now_utc-now_madrid
Out[275]: datetime.timedelta(0)有谁能告诉我,在这种情况下,我怎么能找到时差呢?(预先谢谢:)
发布于 2018-03-27 20:00:11
时间三角洲是"0“,因为马德里是世界协调时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/
https://stackoverflow.com/questions/49513539
复制相似问题