首页 > 解决方案 > .strftime 不在 python:3.7-slim Docker 映像中的“%Y”上应用零填充

问题描述

我在 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'

但是在我的 macbook 上本地在同一个 python 版本上运行它确实会产生 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 派生的自定义图像。我愿意使用占用空间小的不同图像,或者进行优雅的代码更改。

标签: python-3.xdocker

解决方案


您始终可以使用手动解决方法在所有平台上获得相同的格式:

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)

推荐阅读