I\'m using python\'s dateutil.parser
tool to parse some dates I\'m getting from a third party feed. It allows specifying a default date, which itself defaults
I ran into the exact same problem with dateutil, I wrote this function and figured I would post it for posterity's sake. Basically using the underlying _parse
method like @ILYA Khlopotov suggests:
from dateutil.parser import parser
import datetime
from StringIO import StringIO
_CURRENT_YEAR = datetime.datetime.now().year
def is_good_date(date):
try:
parsed_date = parser._parse(parser(), StringIO(date))
except:
return None
if not parsed_date: return None
if not parsed_date.year: return None
if parsed_date.year < 1890 or parsed_date.year > _CURRENT_YEAR: return None
if not parsed_date.month: return None
if parsed_date.month < 1 or parsed_date.month > 12: return None
if not parsed_date.day: return None
if parsed_date.day < 1 or parsed_date.day > 31: return None
return parsed_date
The returned object isn't adatetime
instance, but it has the .year
, .month
, and, .day
attributes, which was good enough for my needs. I suppose you could easily convert it to a datetime
instance.