寻找最简单的方法来计算两个python时间之间的差异并显示毫秒差
有2倍的
startTime = datetime.datetime.now().time()
做一些事情…
endTime= datetime.datetime.now().time()
这工作得很好,当我记录时间,我得到这样的东西在我的日志…
RequestStartTime = 08:56:19.188999
ResponseTime = 08:56:19.905999
当我尝试简单地像这样减去它们
delta = endTime - startTime
我得到以下错误
unsupported operand type(s) for -: 'time' and 'time'
我想做的就是用微秒来表示它们之间的差异,但是我不能算出来
我想显示的是717000 ms
如果您只使用now()
的结果,而不将其转换为time
s,则可以取差值&以你想要的形式提取你想要的比特;例如:
startTime = datetime.datetime.now()
endTime= datetime.datetime.now()
delta = endTime - startTime
print str(delta).split(":")[2]
试试这个:
from datetime import datetime, date
datetime.combine(date.today(), endTime) - datetime.combine(date.today(), startTime)
要手动测量差异,您应该使用time.monotonic()
。
如果你不关心闰秒(~1s误差一年半),你需要显示本地时间:
#!/usr/bin/env python3
from datetime import datetime, timedelta, timezone
start = datetime.now(timezone.utc).astimezone() # current local time
# print("RequestStartTime = %s" % start.time())
end = datetime.now(timezone.utc).astimezone()
diff_milliseconds = (end - start) / timedelta(milliseconds=1)
print("%.0f ms" % diff_milliseconds)
代码在DST转换期间工作得很好。
注意:它与只使用.now()
的代码不同。如果你使用.now()
(没有参数),那么你会得到一个朴素的datetime对象,它表示本地时间,在这种情况下,如果DST转换发生在start
和end
之间,那么end - start
返回一个完全错误的结果,即,代码可能在某些时区每年大约几次错误一个小时。
您得到错误的原因是因为类time
不支持减法。您必须将time
转换为毫秒(int格式),以便彼此相减。
用time
代替datetime
import time
def timenow():
return int(round(time.time() * 1000))
startTime = timenow()
time.sleep(1)
endTime = timenow()
delta = endTime - startTime
print delta
最简单的解决方案是将datetime对象转换为时间戳,然后减去它们。如果您使用Python 3.3或更高版本,您可以简单地执行以下操作
startTime = datetime.datetime.now(timezone.utc).timestamp()
...
endTime = datetime.datetime.now(timezone.utc).timestamp()
然后你可以把它们相减
在Python 2中没有可用的时间戳方法。一种方法是使用timedelta对象:
startTime = datetime.datetime.now(timezone.utc)
...
endTime = datetime.datetime.now(timezone.utc)
dt = (endTime - startTime).total_seconds()
第三种选择是简单地使用time.time()
的原始时间戳并减去它们以获得以秒和秒的分数为单位的时间间隔。
为了更安全,你可以使用time.monotonic()
作为@Sebastian提到的。
这是这个问题的最佳答案:https://stackoverflow.com/a/39651061/2686243
from datetime import datetime, date
duration = datetime.combine(date.min, end) - datetime.combine(date.min, beginning)