类型错误:不支持-:“str”和“datetime.datetime”的操作数类型

2024-04-27 23:46:52 发布

您现在位置: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

我会得到一个错误: 类型错误:不支持-:“str”和“datetime.datetime”的操作数类型

错误就在这条线上:

startDelta = program_startDate - viewStartDate
stopDelta = program_endDate - viewStartDate

怎么解决这个问题?


Tags: 代码datetime错误channelprogramlistrowcur
2条回答

根据从数据库表检索的数据类型。。。如果您有一个“long”(如上面对评论的回答中所述):

转换为日期时间对象: program_startdate = datetime.strptime(str(row[2]), "%Y%m%d%H%M%S")

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

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

如果是,请使用:

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

而不是把它们转换成字符串。数据库引擎将把它们作为日期时间提供给您,错误将得到解决。

如果它们作为字符串存储在数据库中,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)

相关问题 更多 >