将datetime.datetime与datetime.time组合- TypeError:需要整数。

4
我正在尝试遍历存储在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

当我打印出涉及到的三个变量的“type()”时,我得到了以下结果:
time_db = <type 'datetime.time'> date = <type 'datetime.datetime'> nextDay = <type 'datetime.datetime'>

有没有明显的原因导致这不起作用?我尝试将“date”和“nextDay”的类型更改为“datetime.date”,但没有任何效果。

有人能建议我如何成功地组合这两个变量吗?

2个回答

7
您不能通过构造函数将 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对象作为参数。
现在,您需要拥有一个date和一个time才能使用datetime.combinetime_db已经是time类的实例,但是您的date(这里对于本次解释来说是个不幸的名称)是datetime类型。那么,可以使用datetime.date方法提取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)

谢谢 - 我现在已经将“date”和“nextDay”的“type()”更改为“datetime.date”,就在“if语句”上面,但我仍然得到相同的错误 - 尽管奇怪的是,现在它引用“datetime_db = datetime.datetime.combine(datetime.date(nextDay), datetime.time(time_db))”作为错误行,并且似乎已经通过了之前标记的行。有没有什么原因会看起来对其中一行起作用,而对另一行不起作用? - s666
或许我更好的评论是,“您能引导我正确地实现合并这两个元素的目标吗?” - s666
我给你的最后一段代码怎么样(假设“date”仍然是一个“datetime”)? - Antti Haapala -- Слава Україні
1
是的 - 对不起,我有点慢了 - 我没有仔细阅读。确实有效。非常感谢,谢谢你的帮助! - s666

2

根据combine函数文档

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

这里假设datetime_db都是datetime对象,从它们的外观来看是这样的。

谢谢Mark - 我尝试了,但是收到以下信息:Traceback (most recent call last): File "C:/Users/Stuart/PycharmProjects/untitled/Apache - Copy.py", line 83, in <module> datetime_db = datetime.datetime.combine(date.date(), time_db.timetz()) AttributeError: 'datetime.time' object has no attribute 'timetz' - s666
太棒了!我刚刚把“.timetz()”从结尾删除了,现在它可以工作了 - 非常感谢 - 谢谢!! - s666
这不是Antti之前推荐的吗? - Kevin
是的,我没有仔细阅读回复。现在我已经接受了答案。谢谢大家。 - s666

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接