e 是格式中的坏指令 %e %B %Y

2024-05-12 13:01:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将“DD-m m-YYYY”格式的字符串转换为datetime对象。如果日期中的日期是个位数,我希望输出中的日期整数由个位数组成。例如,在转换为datetime对象而不是“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'

格式有什么问题?如果有帮助的话,我正在使用Python2.7。


Tags: 对象字符串代码fromimportdatetime格式整数
3条回答

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


上面写着

Other codes may be available on your platform. See documentation for\n\ the C library strftime function.\n"


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

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

可以使用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

相关问题 更多 >