'e'是'%e%B%Y'格式的错误指令

Man*_*edi 2 python datetime python-2.7 python-datetime

我正在尝试将以"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")
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

ValueError: 'e' is a bad directive in format '%e %B %Y'
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*nts 5

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

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
Run Code Online (Sandbox Code Playgroud)


unu*_*tbu 5

%e不是Python保证可以处理的格式代码datetime.strftime.请参阅此处表格,以获取Python保证支持的格式代码列表.但是,由于CPython strftime在某些操作系统(如Linux)上调用底层C库的strftime,因此%e存在格式代码.


CPython的源代码表示,

您的平台上可能还有其他代码.请参阅\n\C库strftime函数的文档.\n"


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