Python - 时间的区别

时间:2015-09-02 13:04:09

标签: python datetime

寻找最简单的方法来计算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

6 个答案:

答案 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()(无参数),那么您将获得一个表示本地时间的天真日期时间对象,在这种情况下,如果在startend之间发生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)