Search code examples
pythonstrptimestrftime

Python strptime errors on parsing strftime output


I am trying to store a date in a human readable format. For that I save and read back a string containing a date. I am using date.min to denote a date before any other.

from datetime import datetime, date

d = date.min
s = datetime.strftime(d, "%Y-%m-%d")
print(s) 
# 1-01-01

d2 = datetime.strptime(s, "%Y-%m-%d")
# ValueError: time data '1-01-01' does not match format '%Y-%m-%d'

However, when I try to parse the date using strptime that was output by strftime, I only get an error. It seems that strptime is expecting leading zeros like 0001, which strftime is not outputting.

It might be possible to use None. Are there any other ways to work around what seems like a bug to me?


Solution

  • You need to add leading zeros:

    try replacing:

    s = {datetime.strftime(d, "%Y-%m-%d")}
    

    with:

    s = f'{d.year:04d}-{datetime.strftime(d, "%m-%d")}'
    

    If you want to work with dates easily, I can really suggest the 'Arrow' library.
    https://pypi.org/project/arrow/