Parse this date in Python: November 5, 2010

Today I have poor parsing and date formatting.

Points for those who can parse this date format into datetime.dateor datetime.datetime(I'm not too fussy, but I would prefer .date):

5th November 2010

+3
source share
3 answers

Using dateutil :

In [2]: import dateutil.parser as dparser

In [3]: date = dparser.parse('5th November 2010')

In [4]: date
Out[4]: datetime.datetime(2010, 11, 5, 0, 0)
+17
source

Unfortunately, it strptimedoes not have format characters for "skip ordinal suffix" - so I would first skip with a small RE and then parse the "clean" string. I.e:.

>>> import re
>>> import datetime
>>> ordn = re.compile(r'(?<=\d)(st|nd|rd|th)\b')
>>> def parse(s):
...   cleans = ordn.sub('', s)
...   dt = datetime.datetime.strptime(cleans, '%d %B %Y')
...   return dt.date()
... 
>>> parse('5th November 2010')
datetime.date(2010, 11, 5)

date vs datetime , , .date() datetime ; -).

, dateutil, , "" ( ;-), .

+10

If the serial number is constant, then:

datetime.strptime(s, '%dth %B %Y')

Else:

date_str = '5th November 2010'
modified_date_str = date_str[0:1] + date_str[3:]
datetime.strptime(modified_date_str, '%d %B %Y')

Or as ~ unutbu said use dateutil :)

+5
source

All Articles