格式'%e %B %Y'中的'e'指令不正确
我正在尝试把一个格式为“DD MM YYYY”的字符串转换成日期时间对象。我希望输出中的日期部分,如果日期是个位数,就只显示一个数字。例如,输入'1 May 2014'在转换成日期时间对象后应该显示为'1 May 2014',而不是'01 May 2014'。
为此,我使用了% 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 个回答
2
看起来没有直接的指令可以满足你的需求。你可以选择使用零填充,或者把最后一行改成 print d.strftime("%d %B %Y").lstrip('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
7
%e
这个格式代码并不是 Python 的 datetime.strftime
一定能处理的格式。你可以查看 这里的表格,了解 Python 确保支持的格式代码。不过,由于 CPython 的 strftime
是调用底层 C 库的 strftime,在某些操作系统上,比如 Linux,%e
格式代码是存在的。
CPython 源代码 中提到:
你所在的平台可能还有其他代码可用。请查看 C 库 strftime 函数的文档。
没有其他格式代码(保证存在)能像 %e
那样工作。所以如果你的系统没有 %e
,或者你想让你的代码在不同平台上都能用,建议使用字符串格式化,正如 Zacrath 或 Jon Clements 所示。