将日期添加到日期会导致ValueError:未转换的数据仍然存在

时间:2012-06-27 10:51:26

标签: python datetime

这是另一个可能非常简单的问题,但到目前为止我还没有找到任何解决方法。

我正在尝试在2000个列表的列表中添加14天(每个列表为['number1','number2','Day Month Year'])并将新日期作为值添加到每个列表的末尾(即每个列表变为{ {1}})。 到目前为止我得到的是:

['number1', 'number2', 'Day Month Year', 'Day Month Year']

但这会引发错误'ValueError:未转换的数据仍为:01'。列表中的所有日期都应该没问题,所以我无法弄清楚为什么会出现错误。 如果这只是一个简单的错误,请原谅初学者:)

谢谢!

2 个答案:

答案 0 :(得分:0)

你没有使用strptime的结果,虽然这不是你从strptime得到错误的原因。错误是因为您想要%Y而不是%y。你想要这样的东西:

listf = []
for h in hinfo:
    d = datetime.datetime.strptime(h[2], "%d %b %Y")
    listf.append(d + timedelta(days=14))

%y是两位数年份,%Y是四位数年份。

答案 1 :(得分:0)

将新日期附加到原始列表的正确代码,如您在问题中指定的那样:

from datetime import timedelta
import datetime

hinfo = [['C148', 'W29', '08 August 2001'], ['Q964', 'R72', '21 May 2003']]

for i, h in enumerate(hinfo):
    if h[2] == '': # error checking
        del hinfo[i]
        continue
    d = datetime.datetime.strptime(h[2], '%d %B %Y')
    d += timedelta(days=14)
    h.append(d.strftime('%d %B %Y'))

print hinfo

对我来说,如果我能正确理解你的问题,就打印[['C148', 'W29', '08 August 2001', '22 August 2001'], ['Q964', 'R72', '21 May 20 03', '04 June 2003']],这就是你想要的。

如果您收到错误,则很可能输入不是您所说的,或者认为是。