你如何在Python中获得两个时间对象之间的差异

时间:2014-08-12 13:20:20

标签: python datetime

我在Python中有两个datetime.time对象,例如

>>> x = datetime.time(9,30,30,0)
>>> y = datetime.time(9,30,31,100000)

然而,当我像对datetime.datetime对象那样做(y-x)时,我收到以下错误:

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    y-x
TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

我需要以微秒为单位得到y-x值,即在这种情况下它应该是1100000.任何想法?

1 个答案:

答案 0 :(得分:8)

datetime.time不支持对象减法,原因与它不支持对象比较的原因相同,即因为它的对象可能没有定义它们的tzinfo属性:

  

时间的比较,其中当a在时间b之前时a被认为小于b。如果一个comparand是天真的而另一个是知道的,则会引发TypeError。如果两个比较都知道并且具有相同的tzinfo属性,则忽略公共tzinfo属性并比较基本时间。如果两个比较都知道并且具有不同的tzinfo属性,则首先通过减去它们的UTC偏移(从self.utcoffset()获得)来调整比较。为了阻止混合类型比较从对象地址回退到默认比较,当将时间对象与不同类型的对象进行比较时,除非比较为==或!=,否则引发TypeError。后一种情况分别返回False或True。

您应该使用datetime.datetime,其中包括日期和时间。

如果两次是指一天,您可以使用date.today()告诉python日期是今天,并使用datetime.combine将日期与时间结合起来。

现在你有了日期时间你可以执行减法,这将返回一个datetime.timedelta实例,方法total_seconds()将返回秒数(它是一个float包含微秒信息)。所以乘以10 6 就可得到微秒。

from datetime import datetime, date, time

x = time(9, 30, 30, 0)
y = time(9, 30, 31, 100000)

diff = datetime.combine(date.today(), y) - datetime.combine(date.today(), x)
print diff.total_seconds() * (10 ** 6)        # 1100000.0

您也可以使用timedeltas:

from datetime import timedelta
x = timedelta(hours=9, minutes=30, seconds=30)
y = timedelta(hours=9, minutes=30, seconds=31, microseconds=100000)
print (y - x).total_seconds() * (10 ** 6)     # 1100000.0