Парсы датируются до 1000 года
Рассмотрим следующий пример:
from datetime import datetime
FMT = "%Y-%m-%dT%H:%M:%S"
original_date = datetime(1,1,1)
s = original_date.strftime(FMT) # This is '1-01-01T00:00:00'
Когда я теперь пытаюсь проанализировать эту строку обратно в datetime с точным форматом, который я использовал для его сериализации, во-первых, на меня бросается ValueError
:
datetime.strptime(s, FMT)
ValueError: данные времени '1-01-01T00: 00: 00' не соответствует формату '% Y-% m-% dT% H:% M:% S'
Однако
datetime.strptime('0001-01-01T00:00:00', FMT)
работает как ожидалось.
Я бы ожидал, что strptime
сможет обрабатывать все strftime
. Я всегда считал эти функции противоположными друг другу.
Почему original_date.strftime(FMT)
не приводит к нулевому заполнению года? Есть ли причина для этой несогласованности?
Ответы
Ответ 1
Результаты для %Y
не соответствуют всем платформам. В Mac OS X он вернет 0001
, но в Linux он вернет 1
.
В Linux вы можете использовать %4Y
для создания 0001
как значения года.
Это известная проблема: https://bugs.python.org/issue13305.
В документации для strftime()
и strptime()
также указано:
Полный набор поддерживаемых форматных кодов зависит от разных платформ, поскольку Python вызывает функцию платформы strftime() платформы C, а вариации платформы являются общими. Чтобы просмотреть полный набор кодов формата, поддерживаемых на вашей платформе, обратитесь к документации по strftime (3).