转换为十进制日和月时,日期格式字符串无效

Rya*_*fer 1 python datetime python-3.x

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

我得到的错误很简单

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

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

dob.strftime('%-m/%-d/%Y')
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Jon*_*ona 7

答案的一部分隐藏在此 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'
Run Code Online (Sandbox Code Playgroud)

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