58

我计算了平均时间,我想在没有微秒的情况下显示结果平均值。

avg = sum(datetimes, datetime.timedelta(0)) / len(datetimes)
4

7 回答 7

56

如果只是为了展示,这个想法是可行的:

avgString = str(avg).split(".")[0]

我们的想法是只取重点之前的内容。它将返回01:23:4501:23:45.1235

于 2015-04-16T08:33:41.620 回答
55

取 timedelta 并删除它自己的微秒,作为微秒和只读属性:

avg = sum(datetimes, datetime.timedelta(0)) / len(datetimes)
avg = avg - datetime.timedelta(microseconds=avg.microseconds)

如果需要,您可以制作自己的小功能:

import datetime

def chop_microseconds(delta):
    return delta - datetime.timedelta(microseconds=delta.microseconds)

我还没有找到更好的解决方案。

于 2013-08-27T16:12:22.053 回答
18

另一种选择,给定 timedelta 你可以这样做:

avg = datetime.timedelta(seconds=math.ceil(avg.total_seconds()))

您可以根据情况将math.ceil(),替换为math.round()或。math.floor()

于 2017-03-28T07:38:53.790 回答
5
c -= timedelta(microseconds=c.microseconds)
于 2021-07-14T16:03:32.547 回答
0

鉴于timedelta仅在内部存储天、秒和微秒,您可以构造一个没有微秒的新 timedelta:

from datetime import timedelta
datetimes = (timedelta(hours=1, minutes=5, seconds=30, microseconds=9999), 
             timedelta(minutes=35, seconds=17, microseconds=55), 
             timedelta(hours=2, minutes=17, seconds=3, microseconds=1234))
avg = sum(datetimes, timedelta(0)) / len(datetimes) # timedelta(0, 4756, 670429)
avg = timedelta(days=avg.days, seconds=avg.seconds) # timedelta(0, 4756)
于 2020-03-28T18:10:29.383 回答
0

我认为这是在没有微秒的情况下获得最后几分钟的最佳方法:

import time
import datetime
NOW = datetime.datetime.now()
LASTMINUTE =  NOW - datetime.timedelta(minutes=1, seconds = NOW.second, microseconds = NOW.microsecond)
于 2021-09-11T17:14:31.747 回答
-1

我发现这对我有用:

start_time = datetime.now()
some_work()
end time = datetime.now()
print str(end_time - start_time)[:-3]

输出:

0:00:01.955

我在https://docs.python.org/3.2/library/datetime.html#timedelta-objects中搜索后想到了这一点

希望这可以帮助!

于 2019-03-27T14:21:58.573 回答