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

…衆ロ難τιáo~ 提交于 2019-12-05 07:26:33

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)

Try parsing the hours separately:

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

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

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