[EMAIL PROTECTED] wrote: > I know this is a trivial function, and I've now spent more time > searching for a surely-already-reinvented wheel than it would take to > reinvent it again, but just in case... is there a published, > open-source, function out there that takes a string in the form of > "hh:mm:ss" (where hh is 00-23, mm is 00-59, and ss is 00-59) and > converts it to an integer (ss + 60 * (mm + 60 * hh))? I'd like > something that throws an exception if hh, mm, or ss is out of range, or > perhaps does something "reasonable" (like convert "01:99" to 159). > Thanks, > --dang > p.s. > In case this looks like I'm asking for a homework exercise, here's what > I'm using now. It returns False or raises a ValueError exception for > invalid inputs. I'm just wondering if there's an already-published > version. > def dms2int(dms): > """Accepts an 8-character string of three two-digit numbers, > separated by exactly one non-numeric character, and converts it > to an integer, representing the number of seconds. Think of > degree, minute, second notation, or time marked in hours, > minutes, and seconds (HH:MM:SS).""" > return ( > len(dms) == 8 > and 00 <= int(dms[0:2]) < 24 > and dms[2] not in '0123456789' > and 00 <= int(dms[3:5]) < 60 > and dms[5] not in '0123456789' > and 00 <= int(dms[6:8]) < 60 > and int(dms[6:8]) + 60 * (int(dms[3:5]) + 60 * int(dms[0:2])) > )
Have you considered time.strptime()? BTW, your function, given "00:00:00" will return 0 -- you may well have trouble distinguishing that from False (note that False == 0), without resorting to ugliness like: if result is False ... Instead of returning False for some errors and letting int() raise an exception for others, I would suggest raising ValueError yourself for *all* invalid input. You may wish to put more restrictions on the separators ... I would be suspicious of cases where dms[2] != dms[5]. What plausible separators are there besides ":"? Why allow alphabetics? If there's a use case for "23h59m59s", that would have to be handled separately. Note that "06-12-31" could be a date, "12,34,56" could be CSV data. Cheers, John -- http://mail.python.org/mailman/listinfo/python-list