Python将日期转为无前置零日月年格式(如9November2021)的跨平台问题
问题原因
strftime的去前导零格式符存在平台差异:
- MacOS/Linux等Unix系系统使用
%-d输出无前导零的日期 - Windows系统需使用
%#d实现相同效果,直接写%-d就会抛出格式错误
最优跨平台解决方案
推荐直接通过date对象自带属性拼接,完全不依赖平台格式符差异,代码最稳定:
from datetime import date d = date(2021, 11, 9) result = f"{d.day}{d.strftime('%B')}{d.year}" print(result) # 输出:9November2021
说明:d.day是整数类型,直接输出时本身就不带前导零,%B是全平台通用的月份全称格式符,无需额外适配。
如果需要固定输出英文月份,避免系统区域设置影响输出结果,可以额外增加区域配置:
import os import locale from datetime import date # 临时设置时间类区域为英文 locale.setlocale(locale.LC_TIME, 'en_US.UTF-8' if os.name != 'nt' else 'English_US') d = date(2021, 11, 9) result = f"{d.day}{d.strftime('%B')}{d.year}" # 用完可改回默认区域 locale.setlocale(locale.LC_TIME, '')
可选方案:动态适配平台格式符
如果坚持使用strftime全格式字符串实现,可以加平台判断逻辑:
import os from datetime import date d = date(2021, 11, 9) fmt = '%#d%B%Y' if os.name == 'nt' else '%-d%B%Y' result = d.strftime(fmt) print(result)
内容的提问来源于stack exchange,提问作者maciejrum
相关产品推荐
相关产品推荐

