Consider the following birthdays (as dob
):
When parsed with Python’s datetime.strptime(dob, '%d-%b-%y')
will yield:
datetime.datetime(2068, 6, 1, 0, 0)
datetime.datetime(1969, 6, 1, 0, 0)
Well of course they’re supposed to be born in the same decade but now it’s not even in the same century!
According to the docs this is perfectly valid behaviour:
When 2-digit years are accepted, they are converted according to the POSIX or X/Open standard: values 69-99 are mapped to 1969-1999, and values 0–68 are mapped to 2000–2068.
I understand why the function is set up like this but is there a way to work around this? Perhaps with defining your own ranges for 2-digit years?
The strptime() class method takes two arguments: string (that be converted to datetime) format code.
The strptime() function in Python is used to format and return a string representation of date and time.
Python DateTime – strptime() Function strptime() is another method available in DateTime which is used to format the time stamp which is in string format to date-time object.
strptime is short for "parse time" where strftime is for "formatting time". That is, strptime is the opposite of strftime though they use, conveniently, the same formatting specification.
If you're always using it for birthdays, just subtract 100 if the year is after now:
if d > datetime.now():
d = datetime(d.year - 100, d.month, d.day)
This function shifts the year to 1950:
def millenium(year, shift=1950):
return (year-shift)%100 + shift
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With