在Python中使用不同的时区区分日期时间时,如何获得有效的timedelta
实例?如果时区不同,我发现timedelta总是0。
>>> from dateutil.parser import parse
>>> dt0=parse('2017-02-06 18:14:32-05:00')
>>> dt0
datetime.datetime(2017, 2, 6, 18, 14, 32, tzinfo=tzoffset(None, -18000))
>>> dt1=parse('2017-02-06 23:14:32+00:00')
>>> dt1
datetime.datetime(2017, 2, 6, 23, 02, 12, tzinfo=tzutc())
>>> (dt1-dt0).total_seconds()
0.0
这对我没有任何意义。我原以为Python的datetime类足够聪明,可以在内部将这两个值规范化为UTC,然后根据这些值返回timedelta。或抛出异常。相反,它返回0,意味着两个日期时间相等,显然它们不是。我在这里做错了什么?
答案 0 :(得分:1)
你对时区意味着什么感到困惑;你给的两次是相同的,所以他们的差别当然是零。我可以复制你的结果,除了我没有你所拥有的第二个字符串和第二个datetime
之间的差异:
>>> from dateutil.parser import parse
>>> dt0=parse('2017-02-06 18:14:32-05:00')
>>> dt0
datetime.datetime(2017, 2, 6, 18, 14, 32, tzinfo=tzoffset(None, -18000))
>>> dt1=parse('2017-02-06 23:14:32+00:00')
>>> dt1
datetime.datetime(2017, 2, 6, 23, 14, 32, tzinfo=tzutc())
>>> (dt1-dt0).total_seconds()
0.0
但请注意将dt0
转换为UTC时会发生什么。时间由5小时时区差异调整,与第二时间相同。
>>> dt0.astimezone(dt1.tzinfo)
datetime.datetime(2017, 2, 6, 23, 14, 32, tzinfo=tzutc())