python-3.x - 如何在 python 中将 timedeltas 总和超过 24 小时?
问题描述
如何在循环中求和 timedeltas?如果我手动添加时间增量,则总和是正确的。但是,如果我使用 while 循环来求和 timedeltas,我会收到此错误:
TypeError:只能将str(不是“datetime.timedelta”)连接到str
另一个问题是,如果总和值超过 24 小时 - python 将总和打印为一天和 x 小时。例如,我需要 26:15(26 小时 15 分钟)的总和值。
import datetime
fmt = '%H%M'
start = [];end = [];td = []
start.append( datetime.datetime.strptime('0300', fmt) )
start.append( datetime.datetime.strptime('0645', fmt) )
end.append( datetime.datetime.strptime('1505', fmt) )
end.append( datetime.datetime.strptime('1845', fmt) )
td.append( end[0] - start[0] )
td.append( end[1] - start[1] )
print('timedelta1= ' + str(td[0]))
print('timedelta2= ' + str(td[1]))
tSum = td[0] +td[1]
print( 'Sum: ' + str(tSum) )
tSumLoop = ''
i = 0
while i < 2:
tSumLoop += td[i]
i += 1
print(tSumLoop)
我该如何解决这两个问题?谢谢你的帮助!
解决方案
您可以将起始值用作零 timedelta: datetime.timedelta(0)
:
tSumLoop = datetime.timedelta(0)
i = 0
while i < 2:
tSumLoop += td[i]
i += 1
print(tSumLoop)
或使用sum()
:
tSum = sum(td, datetime.timedelta(0))
print( 'Sum:', tSum )
印刷:
Sum: 1 day, 0:05:00
编辑:要格式化总和,您可以使用(基于https://stackoverflow.com/a/62719270/10035985)
def period(delta, pattern):
d = {}
d['h'], rem = divmod(delta.total_seconds(), 3600)
d['m'], d['s'] = divmod(rem, 60)
return pattern.format(**d)
tSum = sum(td, datetime.timedelta(0))
print(period(tSum, '{h:>02.0f}:{m:>02.0f}'))
印刷:
24:05
推荐阅读
- php - Laravel:在我的登录/注册页面添加 make:auth 后出现错误
- php - 为什么在生产服务器上,浮点数以逗号而不是小数点返回?
- angular - Angular 和 Openlayers 应用指南
- c# - 这是否可能使用相同值更新进行更改跟踪
- r - 闪亮的复选框按钮宽度和居中
- arduino - ARDUINO:如何将 GPS 数据发送到 Firebase?
- javascript - ReferenceError:使用“+=”时分配中的左侧无效
- firebase - Firestore 云功能:POST 请求的问题
- python - Webots R2019a 修订版 1 在 Python API 中崩溃
- nativescript - 如何更改搜索栏的颜色