Search code examples
pythondatetimedatetime-parsing

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


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

Solution

  • 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.