Workaround for bug in dateutil 2.5.3 that causes parsing of ISO 8601 dates to break on systems where the date locale specifies that days come before months

See https://github.com/dateutil/dateutil/issues/268
This commit is contained in:
Kovid Goyal 2016-06-03 20:27:45 +05:30
parent ae1fbeff6c
commit b5cae785db

View File

@ -108,6 +108,13 @@ def is_date_undefined(qt_or_dt):
d.month == UNDEFINED_DATE.month and
d.day == UNDEFINED_DATE.day)
_iso_pat = None
def iso_pat():
global _iso_pat
if _iso_pat is None:
_iso_pat = re.compile(r'\d{4}-\d{2}-\d{2}')
return _iso_pat
def parse_date(date_string, assume_utc=False, as_utc=True, default=None):
'''
Parse a date/time string into a timezone aware datetime object. The timezone
@ -128,6 +135,9 @@ def parse_date(date_string, assume_utc=False, as_utc=True, default=None):
func = datetime.utcnow if assume_utc else datetime.now
default = func().replace(day=15, hour=0, minute=0, second=0, microsecond=0,
tzinfo=_utc_tz if assume_utc else _local_tz)
if iso_pat().match(date_string):
dt = parse(date_string, default=default)
else:
dt = parse(date_string, default=default, dayfirst=parse_date_day_first)
if dt.tzinfo is None:
dt = dt.replace(tzinfo=_utc_tz if assume_utc else _local_tz)