我正在处理我的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
如何解决这个问题?
答案 0 :(得分:2)
问题与错误状态完全一致。 program_startDate
和program_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")