5

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

datetime.time如果您想记录超过 24 小时的时间,除非我遗漏了什么,否则它的要求0 <= hour < 24是否使它无用?

例如,我想计算某人工作的总时间。我知道他们单独完成任务所花费的时间。我应该使用什么课程来安全地计算总时间。

我的输入数据看起来像这样:

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

2 回答 2

6

不幸的是,没有内置的方法可以从字符串(如对象)构造时间增量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
于 2013-08-18T20:30:45.010 回答
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
于 2013-08-18T20:41:14.197 回答