如何在python中处理超过24小时的时间值?

时间:2012-08-22 14:37:43

标签: python date time format

我正在处理大量具有值和时间(以字符串形式)的数据。

我正在使用以下代码将字符串时间值转换为datetime值:

time = datetime.datetime.strptime(time, " %H:%M:%S.%f")

唯一的问题是我的部分数据格式为:24:00:00.004 所以有些数据实际上超过24小时

Python给了我这个错误:ValueError:时间数据'24:00:00:004'与格式'%H不匹配:%M:%S。%f'

有关如何处理此问题的任何想法

3 个答案:

答案 0 :(得分:8)

%H参数只能解析0-23范围内的值。您必须手动处理这些特定的时间戳:

try:
     time = datetime.datetime.strptime(time, " %H:%M:%S.%f")
except ValueError:
     time = time.replace(' 24', ' 23')
     time = datetime.datetime.strptime(time, " %H:%M:%S.%f")
     time += datetime.timedelta(hours=1)

答案 1 :(得分:2)

尝试分别解析小时:

hours, rest = time.split(':', 1)
time = datetime.timedelta(hours=int(hours)) + datetime.datetime.strptime(rest, "%M:%S.%f")

答案 2 :(得分:1)

似乎您的数据不包含日期,但时间跨度,因此您应该将数据存储为timedelta而不是datetime


您可以使用this功能从字符串中创建timedelta

import re
from datetime import timedelta

def parseTimeDelta(s):
    d = re.match(
            r'((?P<days>\d+) days, )?(?P<hours>\d+):'
            r'(?P<minutes>\d+):(?P<seconds>\d+)\.(?P<milliseconds>\d+)',
            str(s)).groupdict(0)
    return timedelta(**dict(( (key, int(value))
                              for key, value in d.items() )))

解析您的时间字符串'24:00:00.004',如此

  

&gt;&gt;&gt; t = parseTimeDelta('24:00:00.04')

会导致timedelta表示如下

  

&GT;&GT;&GT;打印t
  1天,0:00:00.004000