Парсы датируются до 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 сможет обрабатывать все, что strptime strftime . Я всегда считал эти функции противоположными.

Почему original_date.strftime(FMT) не приводит к нулевому заполнению года? Есть ли причина для этой несогласованности?

Результаты для %Y не согласуются между платформами. В Mac OS X он вернется в 0001 но в Linux он возвращает 1 .

В Linux вы можете использовать %4Y для получения 0001 качестве значения года.

Это известная проблема: https://bugs.python.org/issue13305 .

В документации для strftime() и strptime() также указано:

Полный набор поддерживаемых форматов зависит от разных платформ, потому что Python вызывает функцию strftime () библиотеки платформы C, и вариации платформы являются общими. Чтобы увидеть полный набор кодов формата, поддерживаемых на вашей платформе, обратитесь к документации по strftime (3).