将datetime.datetime与datetime.time相结合 - TypeError:需要一个整数

时间:2015-02-20 20:14:59

标签: python datetime python-datetime

我目前正在尝试迭代SQL请求游标中包含的一些数据,将某些数据的类型改为" datetime.time"然后将其与另一个变量组合成一个名为" datetime_db"。

的新变量

我有两个变量名为" date"和" nextDay"以前在我的代码中已经定义过。前面提到的" datetime.time"将与" date"结合使用或" nextDay"视具体情况而定。

我的代码如下:

for (date_db,time_db,price) in cursor:
    time_db = datetime.datetime.strptime(time_db,"%H:%M:%S").time()
    price = float(price)

    if (date_db == date):
        datetime_db = datetime.datetime.combine(datetime.date(date), datetime.time(time_db))

    else:
        datetime_db = datetime.datetime.combine(datetime.date(nextDay), datetime.time(time_db))

这会引发以下错误:

File "C:/Users/Stuart/PycharmProjects/untitled/Apache - Copy.py", line 82, in <module>
datetime_db = datetime.datetime.combine(datetime.date(date), datetime.time(time_db))
TypeError: an integer is required

当我打印出&#34;类型()&#34;对于涉及的3个变量,我得到以下内容:

time_db = <type 'datetime.time'> date = <type 'datetime.datetime'> nextDay = <type 'datetime.datetime'>

为什么这不起作用有什么明显的原因吗?我试过改变&#34; date&#34;和&#34; nextDay&#34;到&#34; datetime.date&#34;但这没什么区别。

有人可以建议我如何成功地合并这两个变量吗?

2 个答案:

答案 0 :(得分:6)

您无法通过构造函数将datetime转换为date

>>> datetime.date(datetime.datetime.now())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: an integer is required

datetime.time构造函数也是如此;它不接受另一个time对象作为参数。

现在,您需要datetime才能使用datetime.combine; time_db已经是类time的一个实例,但是您的date(此解释的不幸名称)属于datetime类型。好吧,可以使用date方法提取date datetime.date部分内容:

>>> dt = datetime.datetime.now()
>>> dt
datetime.datetime(2015, 2, 20, 22, 21, 22, 806109)
>>> dt.date()
datetime.date(2015, 2, 20)

因此你可以这样做:

datetime.datetime.combine(date.date(), time_db)

答案 1 :(得分:2)

来自documentation for combine

datetime_db = datetime.datetime.combine(date.date(), time_db.timetz())

这假设datetime_db都是datetime个对象,它们似乎是。