【问题标题】:Format string for date invalid when converting to decimal day and month转换为十进制日期和月份时,日期格式字符串无效
【发布时间】:2019-12-02 19:23:50
【问题描述】:

具体来说,我在 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

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

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

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

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

我不希望使用像 {dob.year} 等这样的解决方案,因为我已经有一个格式字符串可以放入其中。

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

【问题讨论】:

  • 你能显示你的varialbe dob中有什么
  • 在 Windows 上使用# 而不是-,如那里所说:stackoverflow.com/questions/28894172/…
  • @jona 解决了这个问题,您能否将其充实为未来读者的完整答案?

标签: python python-3.x datetime


【解决方案1】:

部分答案隐藏在此 SA 评论中:Why does "%-d", or "%-e" remove the leading space or zero?

在 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'

很遗憾,我没有跨平台的解决方案。

【讨论】:

    猜你喜欢
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    相关资源
    最近更新 更多