Рассмотрите следующие дни рождения (как dob
):
При парсинге с Python datetime.strptime(dob, '%d-%b-%y')
уступит:
datetime.datetime(2068, 6, 1, 0, 0)
datetime.datetime(1969, 6, 1, 0, 0)
Хорошо, конечно, они, как предполагается, рождаются в то же десятилетие, но теперь это даже не находится в том же веке!
Согласно документам это - совершенно допустимое поведение:
Когда 2-разрядные годы приняты, они преобразовываются согласно POSIX или стандарту X/Open: значения 69-99 отображаются на 1969-1999, и оценивает 0–68, отображаются на 2000–2068.
Я понимаю, почему функция настраивается как это, но является там способом работать вокруг этого? Возможно, с определением Ваших собственных диапазонов в течение 2-разрядных лет?
Если вы всегда используете его для дней рождения, просто вычтите 100, если год будет позже:
if d > datetime.now():
d = datetime(d.year - 100, d.month, d.day)
Если вы ожидаете день рождения, вы всегда можете просто помассировать вручную данные - любая дата в будущем автоматически переносится на столетие назад или что-то в этом роде.
Эта функция сдвигает год на 1950:
def millenium(year, shift=1950):
return (year-shift)%100 + shift