我试图转换" 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,如果有帮助的话。
答案 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。
您的平台上可能提供其他代码。见文档 用于\ n \ C库strftime函数。\ n"
没有其他格式代码(保证存在),其行为类似于%e
。因此,如果您的系统没有%e
,或者您希望代码与跨平台兼容,请使用字符串格式,如Zacrath或Jon Clements所示。
答案 2 :(得分:2)
似乎并不是你想要的指令。您可以使用零填充,也可以将最后一行更改为print d.strftime("%d %B %Y").lstrip('0')
。