Fix bug when omitting day in parsing

This commit is contained in:
Manuel Ebert 2014-07-21 14:22:07 +09:00
parent 7f7f00e91b
commit 316374922b

View file

@ -18,11 +18,18 @@ def parse(date_str, inclusive=False, default_hour=None, default_minute=None):
elif isinstance(date_str, datetime): elif isinstance(date_str, datetime):
return date_str return date_str
default_date = DEFAULT_FUTURE if inclusive else DEFAULT_PAST
date = None
while not date:
try: try:
date = dateparse(date_str, default=DEFAULT_FUTURE if inclusive else DEFAULT_PAST) date = dateparse(date_str, default=default_date)
flag = 1 if date.hour == date.minute == 0 else 2 flag = 1 if date.hour == date.minute == 0 else 2
date = date.timetuple() date = date.timetuple()
except ValueError: except Exception as e:
if e.args[0] == 'day is out of range for month':
y, m, d, H, M, S = default_date.timetuple()[:6]
default_date = datetime(y, m, d - 1, H, M, S)
else:
date, flag = CALENDAR.parse(date_str) date, flag = CALENDAR.parse(date_str)
if not flag: # Oops, unparsable. if not flag: # Oops, unparsable.
@ -45,5 +52,4 @@ def parse(date_str, inclusive=False, default_hour=None, default_minute=None):
dt = datetime.now() - date dt = datetime.now() - date
if dt.days < -28: if dt.days < -28:
date = date.replace(date.year - 1) date = date.replace(date.year - 1)
return date return date