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

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

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

При парсинге с 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-разрядных лет?

6
задан casr 19 July 2010 в 17:04
поделиться

3 ответа

Если вы всегда используете его для дней рождения, просто вычтите 100, если год будет позже:

if d > datetime.now():
    d = datetime(d.year - 100, d.month, d.day)
12
ответ дан 8 December 2019 в 17:18
поделиться

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

0
ответ дан 8 December 2019 в 17:18
поделиться

Эта функция сдвигает год на 1950:

def millenium(year, shift=1950):
    return (year-shift)%100 + shift
2
ответ дан 8 December 2019 в 17:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: