Parsing datetime strings with microseconds in Python 2.5

It might not be the best solution, but you can use a regular expression:

m = re.match(r'(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})(?:\.(\d{6}))?', datestr)
dt = datetime.datetime(*[int(x) for x in m.groups() if x])

Someone has already filed a bug with this issue: Issue 1982. Since you need this to work with python 2.5 you must parse the value manualy and then manipulate the datetime object.


Use the dateutil module. It supports a much wider range of date and time formats than the built in Python ones.

You'll need to easy_install dateutil for the following code to work:

from dateutil.parser import parser

p = parser()
datetime_with_microseconds = p.parse('2009-02-10 16:06:52.598800')
print datetime_with_microseconds.microsecond

results in:

598799

Alternatively:

from datetime import datetime

def str2datetime(s):
    parts = s.split('.')
    dt = datetime.strptime(parts[0], "%Y-%m-%d %H:%M:%S")
    return dt.replace(microsecond=int(parts[1]))

Using strptime itself to parse the date/time string (so no need to think up corner cases for a regex).