How can I parse a time string containing milliseconds in it with python?

StackOverflow

I am able to parse strings containing date/time with time.strptime

>>> import time
>>> time.strptime("30/03/09 16:31:32", "%d/%m/%y %H:%M:%S")
(2009, 3, 30, 16, 31, 32, 0, 89, -1)

How can I parse a time string that contains milliseconds?

>>> time.strptime("30/03/09 16:31:32.123", "%d/%m/%y %H:%M:%S")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.5/_strptime.py", line 333, in strptime
    data_string[found.end():])
ValueError: unconverted data remains: .123

Answer rating: 359

Python 2.6 added a new strftime/strptime macro %f. The docs are a bit misleading as they only mention microseconds, but %f actually parses any decimal fraction of seconds with up to 6 digits, meaning it also works for milliseconds or even centiseconds or deciseconds.

time.strptime("30/03/09 16:31:32.123", "%d/%m/%y %H:%M:%S.%f")

However, time.struct_time doesn"t actually store milliseconds/microseconds. You"re better off using datetime, like this:

>>> from datetime import datetime
>>> a = datetime.strptime("30/03/09 16:31:32.123", "%d/%m/%y %H:%M:%S.%f")
>>> a.microsecond
123000

As you can see, .123 is correctly interpreted as 123 000 microseconds.





Get Solution for free from DataCamp guru