首页 > 解决方案 > 转换为十进制日期和月份时,日期格式字符串无效

问题描述

具体来说,我在使用%-d%-m在 Windows 上时遇到问题。

我得到的错误很简单

output_dict.update({"DOB1": f"{dob.strftime('%-m/%-d/%Y') if not dob is None else 'UniqueID' + str(row)}"})
ValueError: Invalid format string

我的格式字符串如下所示:

dob.strftime('%-m/%-d/%Y')

我相当肯定这是因为我是 Windows,但我想知道是否有一个独立于平台的方法来解决这个问题,或者我是否做错了什么导致了这个错误。

我看到一些关于%e在 Windows 中使用一个月的内容,strftime但它用空格代替了 0,但这是不可取的。我正在尝试获得这些确切的输出(我稍后使用类似的格式字符串)1/1/2000January 1 2000.

我不想使用像{dob.year}ect 这样的解决方案,因为我已经有一个格式字符串,它被放置在其中。

我将不胜感激有关最佳实践的任何想法以及如何实施解决方案。谢谢你。

标签: pythonpython-3.xdatetime

解决方案


部分答案隐藏在这个 SA 评论中:为什么“%-d”或“%-e”会删除前导空格或零?

在 Windows 上,您应该使用#来避免零填充(它取代了-Unix 系统上的)。

这是一个小例子:

>>> from datetime import datetime
>>> datetime(2015, 3, 5).strftime('%d')
'05'
>>> datetime(2015, 3, 5).strftime('%-d')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Invalid format string
>>> datetime(2015, 3, 5).strftime('%#d')
'5'

不幸的是,我没有跨平台的解决方案。


推荐阅读