【问题标题】:'e' is a bad directive in format '%e %B %Y''e' 是格式为 '%e %B %Y' 的错误指令
【发布时间】:2014-07-05 13:27:02
【问题描述】:

我正在尝试将以“DD MM YYYY”格式给出的字符串转换为日期时间对象。如果日期中的日期为个位数,我希望输出中的日期整数包含单个数字。例如,输入“2014 年 5 月 1 日”应在转换为日期时间对象而不是“2014 年 5 月 1 日”后转换为“2014 年 5 月 1 日”。

为此,我使用 %e 格式来转换输出日期中的日期。这是相同的代码:

import datetime
from datetime import timedelta

s = "1 July 2013"
d = datetime.datetime.strptime(s, "%e %B %Y")  

print d.strftime("%e %B %Y")

但是,我收到以下错误:

ValueError: 'e' is a bad directive in format '%e %B %Y'

格式有什么问题?如果有帮助,我正在使用 Python 2.7。

【问题讨论】:

标签: python python-2.7 datetime python-datetime


【解决方案1】:

%e 不是保证可由 Python 的datetime.strftime 处理的格式代码。请参阅table here 以获取 Python 保证支持的格式代码列表。然而,由于 CPython 的 strftime 调用底层 C 库的 strftime,在某些操作系统上,例如 Linux,%e format code exists


CPython source code 说,

您的平台上可能还提供其他代码。查看文档 对于\n\ C 库 strftime 函数。\n"


没有其他格式代码(保证存在)其行为类似于%e。因此,如果您的系统没有%e,或者您希望您的代码跨平台兼容,请使用字符串格式,如ZacrathJon Clements 所示。

【讨论】:

    【解决方案2】:

    您可以使用str.format 将字符串格式和属性访问与strftime 样式混合,例如:

    from datetime import datetime
    
    s = "1 July 2013"
    d = datetime.strptime(s, "%d %B %Y")
     # 2013-07-01 00:00:00
    out = '{0.day} {0:%B %Y}'.format(d)
    # 1 July 2013
    

    【讨论】:

    • 请注意,%e 如果当天仅包含一个数字,则会添加一个空格。
    【解决方案3】:

    似乎没有您想要的指令。您可以使用零填充,也可以将最后一行更改为print d.strftime("%d %B %Y").lstrip('0')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      相关资源
      最近更新 更多