从 timedelta 对象中删除微秒

问题描述 投票:0回答:8

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

avg = sum(timedeltas, datetime.timedelta(0)) / len(timedeltas)
python datetime format timedelta
8个回答
68
投票

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

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

这个想法是只取该点之前的内容。 它将返回 01:23:4501:23:45.1235


66
投票

获取 timedelta 并删除其自身的微秒,作为微秒和只读属性:

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

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

import datetime

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

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


20
投票

另一个选项,给定 timedelta 你可以这样做:

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

您可以根据情况将

math.ceil()
替换为
math.round()
math.floor()


10
投票
c -= timedelta(microseconds=c.microseconds)

1
投票

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

from datetime import timedelta
timedeltas = [
    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(timedeltas, timedelta(0)) / len(timedeltas) # timedelta(0, 4756, 670429)
avg = timedelta(days=avg.days, seconds=avg.seconds) # timedelta(0, 4756)

0
投票

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

import time
import datetime
NOW = datetime.datetime.now()
LASTMINUTE =  NOW - datetime.timedelta(minutes=1, seconds = NOW.second, microseconds = NOW.microsecond)

0
投票

Hobbestigrou答案还可以,但它不圆。如果您想要一个能够利用

pandas.Timedelta.round
的工具,这里是:

import datetime
import pandas as pd

td = datetime.timedelta(hours=1, minutes=23, seconds=45, microseconds=678901)
print(td)
1:23:45.678901

td2 = pd.Timedelta(td).round('s').to_pytimedelta()
print(td2)
1:23:46

-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

© www.soinside.com 2019 - 2024. All rights reserved.