Commit aef7b91dba5 by Jun Wu

dateutil: correct default for Ymd in parsedate

The code uses `0` for the default value of Ymd (year, month, and day), which
seems suboptimal. For example, these will fail to parse:

  dateutil.parsedate('2000', formats=dateutil.extendeddateformats)
  dateutil.parsedate('Jan 2000', formats=dateutil.extendeddateformats)

Fix it by providing sane defaults (1 instead of 0) for year, month, and day.

The suboptimal behavior was introduced by 91bc001a592 (2010-12-29,
"date: fix matching of underspecified date ranges"), which does not seem to
justify the current behavior.

Note end-users should not notice the subtle issue, because there are no formats
in `defaultdateformats` that allow an explicit year with omitted month, or an
explicit month with omitted day.

Differential Revision: https://phab.mercurial-scm.org/D7520
parent 92518ca66c7
......@@ -209,6 +209,8 @@ def parsedate(date, formats=None, bias=None):
True
>>> tz == strtz
True
>>> parsedate(b'2000 UTC', formats=extendeddateformats)
(946684800, 0)
"""
if bias is None:
bias = {}
......@@ -244,7 +246,8 @@ def parsedate(date, formats=None, bias=None):
if part[0:1] in b"HMS":
b = b"00"
else:
b = b"0"
# year, month, and day start from 1
b = b"1"
# this piece is for matching the generic end to today's date
n = datestr(now, b"%" + part[0:1])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment