如何在python中使用超过24小时的时间段?我查看了datetime.time
对象,但这似乎是为了处理一天的时间,而不是一般的时间。
datetime.time
有0 <= hour < 24
的要求,如果你想记录超过24小时的时间,除非我遗漏了什么,否则它会变得毫无用处?
比方说,我想计算一个人的总工作时间。我知道他们花时间单独完成任务。我应该用什么课来安全地计算总时间。
我的输入数据如下所示:
# The times in HH:MM:SS
times = ["16:35:21", "8:23:14"]
total_time = ? # 24:58:35
答案 0 :(得分:6)
不幸的是,没有内置方法可以从字符串构造timedeltas(如strptime()
对象datetime
,所以我们必须构建一个解析器:
>>> from datetime import timedelta
>>> import re
>>> def interval(s):
"Converts a string to a timedelta"
d = re.match(r'((?P<days>\d+) days, )?(?P<hours>\d+):'
r'(?P<minutes>\d+):(?P<seconds>\d+)', str(s)).groupdict(0)
return timedelta(**dict(((key, int(value)) for key, value in d.items())))
>>> times = ["16:35:21", "8:23:14"]
>>> print sum([interval(time) for time in times])
1 day, 0:58:35
编辑:错误的答案(我误解了这个问题):
如果您减去日期时间,则会得到一个timedelta对象:
>>> import datetime as dt
>>> times = ["16:35:21", "8:23:14"]
>>> fmt = '%H:%M:%S'
>>> start = dt.datetime.strptime(times[1], fmt )
>>> end = dt.datetime.strptime(times[0], fmt)
>>> diff = (end - start)
>>> diff.total_seconds()
29527.0
>>> (diff.days, diff.seconds, diff.microseconds)
(0, 29527, 0)
>>> print diff
8:12:07
答案 1 :(得分:5)
据我所知,你需要所有时间的总和,而不是差异。因此,您可以将时间转换为timedelta,然后将其总结:
>>> from datetime import timedelta
# get hours, minutes and seconds
>>> tm1 = [map(int, x.split(':')) for x in times]
# convert to timedelta
>>> tm2 = [timedelta(hours=x[0], minutes=x[1], seconds=x[2]) for x in tm1]
# sum
>>> print sum(tm2, timedelta())
1 day, 0:58:35