Python dateutil.parser throws “ValueError: day is out of range for month”

后端 未结 2 1832
后悔当初
后悔当初 2021-01-04 19:55

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

相关标签:
2条回答
  • 2021-01-04 20:30

    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.

    0 讨论(0)
  • 2021-01-04 20:35

    This was a bug in dateutil that has since been fixed. Version 2.5.0 and higher will no longer have this issue.

    If you must use an earlier version, I think that the "correct" way to handle things is to specify the default parameter:

    from dateutil.parser import parse
    from datetime import datetime, date
    
    # First of the current month, at midnight.
    default_date = datetime.combine(date.today(), datetime.min.time()).replace(day=1)
    dt = parse('1994/01', default=default_date)
    

    This will default to the 1st of the month rather than the current day.

    0 讨论(0)
提交回复
热议问题