10

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

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

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

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

Python 给了我这个错误:ValueError: time data '24:00:00:004' does not match format '%H:%M:%S.%f'

关于如何处理这个问题的任何想法

4

3 回答 3

10

%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)
于 2012-08-22T14:42:19.510 回答
3

尝试分别解析小时数:

hours, rest = time.split(':', 1)
time = datetime.timedelta(hours=int(hours)) + datetime.datetime.strptime(rest, "%M:%S.%f")
于 2012-08-22T14:49:57.690 回答
2

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


您可以使用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'像这样解析你的时间字符串

>>>t = parseTimeDelta('24:00:00.04')

会产生一个像这样表示的时间增量

>>> 打印
1 天,0:00:00.004000

于 2012-08-22T14:51:53.573 回答