我目前正在尝试将datetime.date对象与datetime.time对象组合在一起,以获取生成的datetime.datetime样式对象。
我运行SQL查询并通过执行以下操作解析结果:
import sqlite3
import time
import datetime
conn = sqlite3.connect('stu.sqlite3', detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
cur = conn.cursor()
cur.execute('SELECT intra_day.date, intra_day.time, intra_day.price, closing_price.date, closing_price.cprice FROM intra_day, closing_price WHERE intra_day.date = closing_price.date')
for row in cur:
date_intra, time_intra, price_intra, cp_date, cprice = (row[0], row[1], float(row[2]), row[3], float(row[4]))
date_intra = datetime.datetime.strptime(date_intra, '%d/%m/%Y %H:%M:%S').date()
time_intra = datetime.datetime.strptime(time_intra, '%H:%M:%S').time()
cp_date = datetime.datetime.strptime(cp_date, '%d/%m/%Y %H:%M:%S').date()
一旦运行了,我在IDLE中运行类型和打印测试,我得到以下内容:
type(date_intra)
Out[2]: datetime.date
type(time_intra)
Out[3]: datetime.time
type(cp_date)
Out[4]: datetime.date
print date_intra, time_intra, price_intra, cp_date, cprice
2008-07-07 05:40:00 1265.5 2008-07-07 1251.75
date_intra, time_intra, price_intra, cp_date, cprice
Out[13]:
(datetime.date(2008, 7, 7),
datetime.time(5, 40),
1265.5,
datetime.date(2008, 7, 7),
1251.75)
因此,看起来我应该可以使用:
datetime.datetime.combine(date_intra(), time_intra())
组合日期对象和时间对象,但我收到以下错误:
TypeError: 'datetime.date' object is not callable
因为我对Python不好,所以我也尝试过:
datetime.datetime.combine(datetime.date(date_intra), datetime.time(time_intra))
但是得到以下错误:
TypeError: an integer is required
有人能向我指出我做错了什么并且可能纠正我吗?
一旦我将这两者(date_intra和time_intra)结合起来,我希望将cp_date与time_intra结合起来。
答案 0 :(得分:1)
直接传递的日期和时间:
datetime.datetime.combine(date_intra, time_intra)
这些已经 datetime.combine()
期望的正确对象类型;无需再调用它们或将它们再次转换为正确类型 。
演示:
>>> import datetime
>>> date_intra = datetime.date(2008, 7, 7)
>>> time_intra = datetime.time(5, 40)
>>> datetime.datetime.combine(date_intra, time_intra)
datetime.datetime(2008, 7, 7, 5, 40)
您只需一步解析时间和日期 :
date_intra, time_intra, price_intra, cp_date, cprice = (row[0], row[1], float(row[2]), row[3], float(row[4]))
intra = datetime.datetime.strptime(
'{} {}'.format(date_intra.partition(' ')[0], time_intra),
'%d/%m/%Y %H:%M:%S')
这将获取date_intra
字符串的日期部分(第一个空格之前的所有内容),并将time_intra
列文本附加到该字符串以解析合并的日期和时间。
答案 1 :(得分:1)
违规行是
datetime.datetime.combine(date_intra(), time_intra())
这是您将两个变量date_intra
和time_intra
视为功能的地方,并且您正在尝试调用它们。删除括号:
>>> datetime.datetime.combine(date_intra, time_intra)
datetime.datetime(2008, 7, 7, 5, 40)