Двузначное число лет с использованием strptime() не может очень хорошо анализировать дни рождения
Рассмотрим следующие дни рождения (как dob
):
- 1-Jun-68
- 1-Jun-69
Когда разбирается с Python datetime.strptime(dob, '%d-%b-%y')
даст:
datetime.datetime(2068, 6, 1, 0, 0)
datetime.datetime(1969, 6, 1, 0, 0)
Ну, конечно, они должны были родиться в одно и то же десятилетие, но теперь это даже не в том же веке!
Согласно документам это совершенно корректное поведение:
Когда принимаются двухзначные годы, они преобразуются в соответствии со стандартом POSIX или X/Open: значения 69–99 отображаются на 1969–1999, а значения 0–68 - на 2000–2068.
Я понимаю, почему функция настроена так, но есть ли способ обойти это? Возможно с определением ваших собственных диапазонов для двухзначных лет?
3 ответа
Если вы всегда используете его для дней рождений, просто вычтите 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
Если вы ожидаете день рождения, вы всегда можете просто вручную массировать данные - любая дата в будущем автоматически откладывается на столетие или что-то подобное.