python-3.x - .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 派生的自定义图像。我愿意使用占用空间小的不同图像,或者进行优雅的代码更改。
解决方案
您始终可以使用手动解决方法在所有平台上获得相同的格式:
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)
推荐阅读
- vb.net - 如何在 Visual Basic 中同时运行两个复选框事件?
- vue.js - Vuetify 自动完成样式 onfocus
- django - 表单数据未保存在 Django 的数据库中
- javascript - 重启 EC2 实例后 AWS S3 存储桶未重新挂载
- swift - 这个简单的 Swift 函数构建器示例有什么问题?
- angularjs - Django Angular 社交媒体身份验证
- angular - 使用 `element.all(by.id())` 获取元素数量
- c# - 如何在使用 EF 6 的数据库设计中容纳父表的默认值?
- java - 加倍到 int 和加倍到 int
- wpf - 在 WPF 数据网格 MVVM 中创建倒数计时器列