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

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

Объяснение поведения
- Формат
%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" — неверно по тем же причинам.
Как избежать этой ловушки
Лучше явно работать с четырёхзначными годами или самостоятельно контролировать привязку к столетию. Варианты:
- Требовать вход в формате с четырёхзначным годом (
%Y):

- Парсить вручную и задавать свою «границу» (pivot), если вход содержит две цифры:

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