使用超过24小时的时间值

时间:2013-08-18 20:24:35

标签: python time

如何在python中使用超过24小时的时间段?我查看了datetime.time对象,但这似乎是为了处理一天的时间,而不是一般的时间。

datetime.time0 <= hour < 24的要求,如果你想记录超过24小时的时间,除非我遗漏了什么,否则它会变得毫无用处?

比方说,我想计算一个人的总工作时间。我知道他们花时间单独完成任务。我应该用什么课来安全地计算总时间。

我的输入数据如下所示:

# The times in HH:MM:SS
times = ["16:35:21", "8:23:14"]
total_time = ? # 24:58:35

2 个答案:

答案 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