.strftime не применяет заполнение нулями к «% Y» в python: 3.7-slim Docker изображении - PullRequest
0 голосов
/ 05 февраля 2020

Я обнаружил странную причуду в тонкой версии изображения python Docker относительно форматирования даты. Если вы передадите ей дату первого столетия, форматирование %Y-%m-%d не приведет к получению годовой части с добавлением нуля:

$ docker run -ti python:3.7-slim /bin/bash
root@71f21d562837:/# python
Python 3.7.5 (default, Nov 23 2019, 06:10:46) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import date
>>> d = date(197,1,1)
>>> d.strftime('%Y-%m-%d')
'197-01-01'

Но локальный запуск этой же версии python на моем MacBook введите 4 цифры за год:

$ python                     
Python 3.7.5 (default, Nov  1 2019, 02:16:32) 
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import date
>>> d = date(197,1,1)
>>> d.strftime('%Y-%m-%d')
'0197-01-01'

В Python документах предполагается, что %y не должно давать нулевого заполнения, тогда как %Y должно.

То же причуда для версии 3.6-slim. Проблема в том, что в некоторых системах (например, BigQuery) требуется заполнение нулями.

Что может быть самым элегантным / наименее хакерским обходным путем? Я создаю собственное изображение, полученное из python: 3.7-slim. Я открыт для использования другого изображения с небольшим размером или для элегантного изменения кода.

1 Ответ

0 голосов
/ 05 февраля 2020

Вы всегда можете использовать ручной обходной путь для получения одинакового форматирования на всех платформах:

from datetime import date
d = date(197,1,1)
dstr = d.strftime('%Y-%m-%d')
dstr = ('0'+dstr if len(dstr.split('-')[0]) == 3 else dstr)
print(dstr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...