I use a statement as shown below to create a datetime object from a string:
t = datetime.strptime("0023-10-10", "%Y-%m-%d")
Later, somewhere in my code uses the t object and invoke the strftime method with the same format string:
t.strftime("%Y-%m-%d")
This causes a ValueError: year=23 is before 1900; the datetime strftime() methods require year >= 1900.
It seems that the validation of the %Y input is different in this two similar methods.
So I have to do the following to make sure I don’t accept some bad years like 23:
try:
format = "%Y-%m-%d"
t = datetime.strptime("0023-10-10", format)
t.strftime(format)
except ValueError:
...
I wonder if there’s a better way to do this validation.
I like your idea of using a
try..exceptto validate the input, since in some future version of Python, years < 1000 might be acceptable.This comment in the code suggests this restriction is limited to Python’s current implementation of strftime.
In Python 2.7, the exception occurs for
years < 1900, butin Python 3.2, the exception occurs for
years < 1000:prints