2-значные годы с использованием strptime() не очень хорошо анализируют дни рождения

StackOverflow https://stackoverflow.com/questions/3283209

  •  17-09-2020
  •  | 
  •  

Вопрос

Рассмотрим следующие дни рождения (как dob):

  • 1 июня-68
  • 1 июня-69

При анализе с помощью Python's 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 годами.

Я понимаю, почему функция настроена таким образом, но есть ли способ обойти это?Возможно, с определением ваших собственных диапазонов на 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

Если вы ожидаете день рождения, вы всегда можете просто вручную изменить данные - любая дата в будущем автоматически переносится на столетие назад или что-то в этом роде.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top