我正在处理大量具有值和时间(以字符串形式)的数据。
我正在使用以下代码将字符串时间值转换为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'
有关如何处理此问题的任何想法
答案 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