Python - difference between time



寻找最简单的方法来计算两个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转换发生在startend之间,那么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)

最新更新