Как Python интерпретирует двухзначный год в datetime.strptime

Как Python интерпретирует двухзначный год в datetime.strptime

@python_quiz

Разберем этот квиз

Коротко: при разборе формата с %y Python применяет смещение столетия по историческому правилу — двухзначные годы 00–68 переводятся в 2000–2068, а 69–99 — в 1969–1999. Это часто приводит к неожиданным результатам.

Код из задания

python

Запуск этого кода выведет:

Объяснение поведения

  • Формат %y обрабатывает только последние две цифры года. Чтобы вернуть полный год, Python использует конкретное правило:

- 00–68 → 2000–2068
- 69–99 → 1969–1999

  • Поэтому '68' превращается в 2068, а '69' — в 1969. Это не баг, а задокументированное (и исторически обусловленное) поведение.

Анализ вариантов ответа (по текстам вариантов)

  • "2068 и 1969" — соответствует действительному выводу кода: 2068 для '68', 1969 для '69'.
  • "1968 и 1969" — неверно, потому что '68' не превращается в 1968 при использовании %y.
  • "2068 и 2069" — неверно, потому что '69' попадает в диапазон 1969–1999.
  • "1968 и 2068" — неверно по тем же причинам.

Как избежать этой ловушки

Лучше явно работать с четырёхзначными годами или самостоятельно контролировать привязку к столетию. Варианты:

  1. Требовать вход в формате с четырёхзначным годом (%Y):
python
  1. Парсить вручную и задавать свою «границу» (pivot), если вход содержит две цифры:
python
  1. Использовать более гибкие парсеры (например, dateutil) и явно задавать правила, если библиотека позволяет, или предварительно нормализовать год в строке.

Рекомендация

Если дата приходит из ненадёжного источника и может содержать двухзначный год — явно нормализуйте год до четырёх цифр или применяйте собственную стратегию интерпретации. Это избавит от неожиданных «2068 вместо 1968» в вашем приложении.

Report Page