我在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.任何想法?
答案 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