TypeError:不支持的操作数类型 - :' str'和' datetime.datetime'

时间:2014-08-31 15:44:16

标签: python

我正在处理我的python脚本以获取日期格式列表 sqlite数据库。

我创建变量startDelta以获取行的列表 名为program_startDate的变量。

当我使用此语句执行代码时,我的代码出现问题:

#get the programs list
cur.execute('SELECT channel, title, start_date, stop_date FROM programs 
WHERE channel=?', [channel])
programList = list()
programs = cur

for row in programs:
     program = row[1].encode('ascii'), str(row[2]), str(row[3])
     program_startDate = str(row[2])
     program_endDate = str(row[3])
     programList.append(program)
cur.close()

idx = str(programList)

# find nearest half hour
viewStartDate = datetime.datetime.now()
viewStartDate -= datetime.timedelta(minutes = viewStartDate.minute % 30, 
seconds = viewStartDate.second)

startDelta = program_startDate - viewStartDate
stopDelta = program_endDate - viewStartDate

我会收到错误:     TypeError:不支持的操作数类型 - :' str'和' datetime.datetime'

错误正在这条线上跳跃:

startDelta = program_startDate - viewStartDate
stopDelta = program_endDate - viewStartDate

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

问题与错误状态完全一致。 program_startDateprogram_endDate是字符串,你试图从它们中减去日期时间,这是python无法做到的。

这些值是否作为日期时间存储在数据库中?

如果是,请使用:

 program_startDate = row[2]
 program_endDate = row[3]

而不是将它们转换为字符串。 db引擎会将它们作为日期时间给你,错误将被解决。

如果它们作为字符串存储在数据库中,use datetime.strptime根据它们存储的格式将它们转换为日期时间。

编辑:

OP在数据库中存储日期,例如20140831170500.要解决此问题,请使用:

from datetime import datetime
...
...
for row in programs:
    program = row[1].encode('ascii'), str(row[2]), str(row[3])
    program_startDate = datetime.strptime(str(row[2]), '%Y%m%d%H%M%S')
    program_endDate = datetime.strptime(str(row[3]), '%Y%m%d%H%M%S')
    programList.append(program)

答案 1 :(得分:0)

根据您从数据库表中检索的数据类型...如果您有一个" long" (如上面评论中所述):

使用以下命令转换为datetime对象: program_startdate = datetime.strptime(str(row[2]), "%Y%m%d%H%M%S")