【问题标题】:comparing datetime.timedelta and datetime.time in python在 python 中比较 datetime.timedelta 和 datetime.time
【发布时间】:2017-11-09 07:29:18
【问题描述】:

我有这段代码,我在其中执行 sql 查询并获取两个 TIME 字段。现在我想将这两个与其他时间类型字段进行比较。我当前的代码如下

import datetime

def comp(time1,time2):

        start_time_obj = datetime.datetime.strptime(time1, '%H:%M').time()
        end_time_obj = datetime.datetime.strptime(time2, '%H:%M').time()

        sql_select2 = "select TIME(Start_Time), TIME(End_Time) from table1"
        result2 = cur.execute(sql_select2)

        resultSet2 = cur.fetchall()
        for Start_Time,End_Time in resultSet2:
             if (Start_Time <= start_time_obj <= End_Time) or (Start_Time <= end_time_obj <= End_Time):
                    print("Great!")
                    continue

if __name__ == '__main__':
    comp("08:00","10:00")

当我执行这个时,我得到TypeError: '&lt;=' not supported between instances of 'datetime.timedelta' and 'datetime.time' 的错误。这个怎么去掉?

注意:这是数据库中的示例字段结构 - Start_Time 和 End_Time 都为“2017-06-16 08:06:00”。我想要做的是将上述字段中的时间部分与作为参数的时间进行比较

【问题讨论】:

  • Start_TimeEnd_Time 的典型值是什么(在 Python 中,而不是在 DB 中)?他们显然从某个点返回了一个增量时间,您需要先弄清楚那个点是什么,然后才能比较它们。打印出它们的值应该会给你一个线索。
  • @zwer 这是数据库中的示例字段结构 - Start_Time 和 End_Time 的“2017-06-16 08:06:00”。我想要做的是将上述字段中的时间部分与作为参数的时间进行比较
  • 数据库中的内容并不重要,重要的是您的数据库驱动程序(我们不知道是哪个驱动程序)对重要字段所做的 - 它显然会将其转换为 datetime.timedelta 但您需要弄清楚获得该增量的起点是什么。这很可能是时代,但在从 Python 中将其打印出来(或在数据库驱动程序的文档中找到它对 TIME 字段的作用)之前,您无法确定。
  • @zwer 比较数据库中DATETIME 值的时间和python 代码中的正常时间值(如08:00)的最简单方法是什么?
  • 在您知道数据库驱动程序为 DATETIME、TIME 或任何其他 SQL 字段返回的类型之前,您无法知道如何比较它。检查您的数据库驱动程序的文档...

标签: python datetime


【解决方案1】:

如果你这样做了会怎样

 start_time_obj = datetime.datetime.strptime(time1, '%H:%M').date()
 end_time_obj = datetime.datetime.strptime(time2, '%H:%M').date()

使用 .date() 而不是 .time()?

【讨论】:

  • TypeError: '&lt;=' not supported between instances of 'datetime.timedelta' and 'datetime.date'
  • 你的 sql 查询返回的时间对象到底是什么?如果它们是某个时间(例如午夜)的 timedelta,那么您需要使用 start_time_obj/end_time_obj 并从相同的默认时间中减去。 deltatime 是两次之间变化的时间,以分钟/秒为单位。而 datetime 是实际时间。
  • 这是数据库中的示例字段结构 - '2017-06-16 08:06:00' 用于 Start_TimeEnd_Time。我想要做的是将上述字段中的时间部分与作为参数的时间进行比较
  • 看看下面的链接。您的 start_time-obj 和 end_time_obj 是 datetime.time 对象,但您的 sql 查询返回的任何内容都是 datetime.timedelta 对象。您必须通过从一些默认时间中减去来将 datetime.time 转换为 datetime.timedelta。 stackoverflow.com/questions/35241643/…
猜你喜欢
  • 2016-05-16
  • 1970-01-01
  • 2022-11-21
  • 2021-05-22
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
相关资源
最近更新 更多