寻找最简单的方法来计算2个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
答案 0 :(得分:4)
如果您只使用now()
的结果,并且不将其转换为time
s,则可以采用差异&以你想要的形式提取你想要的位;例如:
startTime = datetime.datetime.now()
endTime= datetime.datetime.now()
delta = endTime - startTime
print str(delta).split(":")[2]
答案 1 :(得分:2)
试试这个:
from datetime import datetime, date
datetime.combine(date.today(), endTime) - datetime.combine(date.today(), startTime)
希望这有助于。
答案 2 :(得分:1)
要手动衡量差异,您应该使用time.monotonic()
代替。
如果您不关心闰秒(每年一次〜1次错误),您需要显示当地时间:
#!/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()
(无参数),那么您将获得一个表示本地时间的天真日期时间对象,在这种情况下,如果在start
和end
之间发生DST转换,则{{1}返回一个完全错误的结果,即在某些时区,代码可能每年大约错误一小时。
答案 3 :(得分:0)
您收到错误的原因是因为类time
不支持减法。您必须将time
转换为毫秒(int格式)以相互减去。
而不是使用datetime
,请使用time
import time
def timenow():
return int(round(time.time() * 1000))
startTime = timenow()
time.sleep(1)
endTime = timenow()
delta = endTime - startTime
print delta
答案 4 :(得分:0)
最简单的解决方案是将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提及。
答案 5 :(得分:0)
这是此问题的最佳答案: https://stackoverflow.com/a/39651061/2686243
from datetime import datetime, date
duration = datetime.combine(date.min, end) - datetime.combine(date.min, beginning)