I have a the following code that runs fine with input format like {Year}/{Month}
except when it comes to 1994/02
Here is the sample code
>>> import dateutil.parser as dtp
>>> dtp.parse('1994/01')
datetime.datetime(1994, 1, 29, 0, 0)
>>> dtp.parse('1994/03')
datetime.datetime(1994, 3, 29, 0, 0)
>>> dtp.parse('1994/02')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/antony/.virtualenvs/comp-invest/lib/python2.7/site-packages/dateutil/parser.py", line 720, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "/Users/antony/.virtualenvs/comp-invest/lib/python2.7/site-packages/dateutil/parser.py", line 317, in parse
ret = default.replace(**repl)
ValueError: day is out of range for month
As you can see, the code works fine with 1994/01
and 1994/03
, but fails with 1994/02
Does this have anything to do with leap year? But more important, how do I get around this problem and make my code work again?
Thanks
dtp.parse
is filling in the missing day with the current date's day. You ran the code on 2013/01/29 and day 29 does not exist in February (i.e. 1994/02/29).
Use this instead:
dtp.parse('1994/01'+'/01')
It will give consistent results (first day of month) regardless of when the code is executed.