How to deal with time values over 24 hours in python?

白昼怎懂夜的黑 提交于 2019-12-07 03:18:29

问题


I'm dealing with a large amount of data that has both values and times(in strings).

I am converting the string time values into datetime values with the following code:

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

The only problem is that some of my data has the format: 24:00:00.004.
So some of the data is actually over 24 hours

Python is giving me this error: ValueError: time data ' 24:00:00:004' does not match format ' %H:%M:%S.%f'

Any ideas on how to deal with this problem


回答1:


The %H parameter can only parse values in the range 0-23. You'll have to manually deal with those specific time stamps:

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)



回答2:


Try parsing the hours separately:

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



回答3:


Seems like your data does not contain dates, but time spans, so you should maybe store your data as timedelta instead of datetime.


You can use this function to create a timedelta from your strings:

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() )))

Parsing your time string '24:00:00.004' like this

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

would result in a timedelta represented like this

>>> print t
1 day, 0:00:00.004000



来源:https://stackoverflow.com/questions/12075562/how-to-deal-with-time-values-over-24-hours-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!