在Python中添加持续时间

在Python中添加持续时间,python,datetime,time,Python,Datetime,Time,我想在Python中添加一系列拆分。时间以字符串开头,如“00:08:30.291”。我似乎找不到正确的方法来使用Python对象或API使其方便/优雅。时间对象似乎不使用微秒,所以我使用datetime的strTime成功地解析字符串。但是datetimes似乎并没有增加,我真的不喜欢在几天内溢出(即23+2小时=25小时)。我可以使用datetime.time,但它们也不能添加。TimeDelta似乎是合适的,但从其他事物转换到其他事物似乎有点尴尬。也许我遗漏了一些显而易见的东西。我希望能够

我想在Python中添加一系列拆分。时间以字符串开头,如“00:08:30.291”。我似乎找不到正确的方法来使用Python对象或API使其方便/优雅。时间对象似乎不使用微秒,所以我使用datetime的strTime成功地解析字符串。但是datetimes似乎并没有增加,我真的不喜欢在几天内溢出(即23+2小时=25小时)。我可以使用datetime.time,但它们也不能添加。TimeDelta似乎是合适的,但从其他事物转换到其他事物似乎有点尴尬。也许我遗漏了一些显而易见的东西。我希望能够:

for timestring in times:
    t = datetime.strptime("%H:%M:%S.%f", timestring).time
    total_duration = total_duration + t
print total_duration.strftime("%H:%M:%S.%f")

您使用的是时差,这就是为什么这里只适合使用:

>>> import datetime
>>> d1 = datetime.datetime.strptime("00:08:30.291", "%H:%M:%S.%f")
>>> d1
datetime.datetime(1900, 1, 1, 0, 8, 30, 291000)
>>> d2
datetime.datetime(1900, 1, 1, 0, 2, 30, 291000)
>>> dt1 = datetime.timedelta(minutes=d1.minute, seconds=d1.second, microseconds=d1.microsecond)
>>> dt2 = datetime.timedelta(minutes=d2.minute, seconds=d2.second, microseconds=d2.microsecond)
>>> fin = dt1 + dt2
>>> fin
datetime.timedelta(0, 660, 582000)
>>> str(fin)
'0:11:00.582000'
另外,请不要对变量使用诸如
sum
之类的名称,因为您正在隐藏内置变量。

将numpy作为np导入
#以每行一个持续时间读取文件
以open('clean_times.txt','r')作为f:
x=f.read()
#将字符串转换为“00:02:12.31”的列表
#我必须删除最后一项(空字符串)
tmp=x.split('\n')[:-1]
#获取['00',02',12.31']的列表
tmp=[i.split(':'),用于tmp.copy()中的i]
#使用浮动创建numpy数组
np_tmp=np.array(tmp,dtype=np.float)
#通过列求和,然后除以
#小时/24分钟/60毫秒/1000
#X将是一个浮点数组[天、小时、秒]
#类似于`数组([0,15.68333,7.4189])`
X=np_tmp.sum(轴=0)/np.array([24,60,1000])
我可能在这里,但如果您需要像
'15:41:07.518'这样的花式字符串
作为输出,继续阅读

#X将是一个浮点数组[小时,小时,秒]
X=np_tmp.sum(轴=0)/np.array([1,60,1000])
#丑恶的部分
#小时是整数部分
H=int(X[0])+int(X[1])
#分钟是小时小数部分和整数分钟部分
tmp_M=(X[0]%1+X[1]%1)*60
M=int(tmp\u M)
#秒是分钟的小数部分和整数秒部分
tmp_S=tmp_M%1*60+X[2]
S=int(tmp_S)
#毫秒是秒的小数部分
MS=int(tmp_%1*1000)
#合并输出字符串
#类似“15:41:07.518”的东西
结果=f'{H:02}:{M:02}:{S:02}.{MS:03}'

我不想过多的日子。这是什么意思?23小时+2小时应该等于多少?@SilentGhost:我假设只有很多小时,即25小时。是的,最好是25小时。如果你愿意的话,考虑不必要的。@ Sam Brightman,你是指<代码>持续时间吗?天* 24×60×60 +持续时间。秒< /代码>?如果你是这个意思,请在问题中写出来。S.洛特:我不明白你想让我澄清的是什么,当然可以,但不雅致地拆开结构并重新创建,尤其是原型设计。使用当前的API是否有更简洁/快捷的方法?感觉timedelta应该有strptime之类的。我重命名了问题中的变量。同样,它被排除在strftime之外,在偶数datetime和日期/时间之间转换似乎并不简单:d1.time仍然是datetime。