python - 转换为十进制日期和月份时,日期格式字符串无效
问题描述
具体来说,我在使用%-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/2000
和January 1 2000
.
我不想使用像{dob.year}
ect 这样的解决方案,因为我已经有一个格式字符串,它被放置在其中。
我将不胜感激有关最佳实践的任何想法以及如何实施解决方案。谢谢你。
解决方案
部分答案隐藏在这个 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'
不幸的是,我没有跨平台的解决方案。
推荐阅读
- jquery - 如何在第二次单击时重置 SVG 颜色
- python - 如何读取 shell 命令的输出
- swift - 使用枚举作为 Swift 协议编程的一部分
- spring - 无法在控制器中使用 FeatureManager 自动装配配置文件
- sql-server - FileTable:通过网络共享重命名文件名时出错
- python - simple_cycles 以不确定的顺序产生输出?
- python - 在数据框的 2 变量中查找差异和共同点
- matlab - 在 Matlab/Python 中向量化多个 for 循环
- c# - 在键入时实时显示键盘输入(C# 控制台应用程序)
- docker - 无法在 RHEL 8 上安装 docker