' E'是格式不好的指令'%e%B%Y'

时间:2014-07-05 13:27:02

标签: python python-2.7 datetime 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")

但是,我收到以下错误:

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

格式化有什么问题?我使用的是Python 2.7,如果有帮助的话。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

%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 :(得分:2)

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