TypeError:无法将datetime.timedelta与float进行比较

3 python datetime timedelta

我正在使用我的python脚本来计算开始日期和结束日期格式之间的持续时间20140520160000,20140520170000因此我可以得到小时.

我遇到这个代码有问题:

if epgDuration >= 0.10 and epgDuration <= 0.30:
   epgwidth = "250"
Run Code Online (Sandbox Code Playgroud)

当我试图比较0.10分钟和0.30分钟之间的时间范围时,我得到一个错误.

我得到的错误是:TypeError:无法将datetime.timedelta与float进行比较.

错误是跳到这一行:

if epgDuration >= 0.10 and epgDuration <= 0.30:
Run Code Online (Sandbox Code Playgroud)

结果如下:

14:44:55 T:1580  NOTICE: 0:30:00
14:44:55 T:1580  NOTICE: 2:30:00
14:44:55 T:1580  NOTICE: 3:00:00
14:44:55 T:1580  NOTICE: 1:00:00
14:44:55 T:1580  NOTICE: 0:30:00
14:44:55 T:1580  NOTICE: 0:30:00
14:44:55 T:1580  NOTICE: 0:30:00
14:44:55 T:1580  NOTICE: 0:30:00
14:44:55 T:1580  NOTICE: 0:30:00
14:44:55 T:1580  NOTICE: 0:30:00
14:44:55 T:1580  NOTICE: 1:00:00
14:44:55 T:1580  NOTICE: 0:30:00
14:44:55 T:1580  NOTICE: 0:30:00
14:44:55 T:1580  NOTICE: 0:30:00
Run Code Online (Sandbox Code Playgroud)

这是我用来持续时间的代码:

for row in programs:
    program_startdate = str(row[2])
    program_endDate = str(row[3])

    try:
       start_date = datetime.datetime.strptime(program_startdate, "%Y%m%d%H%M%S")
       end_date = datetime.datetime.strptime(program_endDate, "%Y%m%d%H%M%S")
    except TypeError:
       start_date = datetime.datetime.fromtimestamp(time.mktime(time.strptime(program_startdate, "%Y%m%d%H%M%S")))
       end_date = datetime.datetime.fromtimestamp(time.mktime(time.strptime(program_endDate, "%Y%m%d%H%M%S")))

    #workout the duration times to get the program time
    epgDuration = end_date - start_date

    if epgDuration >= 0.10 and epgDuration <= 0.30:
       epgwidth = "250"

    elif epgDuration >= 1.00 and epgDuration <= 1.29:
         epgwidth = "500"
    print epgwidth
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 8

实际上,您无法将a timedelta与浮点值进行比较.

可以将对象转换为秒:

if 600 <= epgDuration.total_seconds() <= 1800:
Run Code Online (Sandbox Code Playgroud)

其中10分钟为600秒,30分钟为1800分钟.

或者创建timedelta()要比较的新对象:

epgwidth = "0"

if timedelta(minutes=10) <= epgDuration <= timedelta(minutes=30):
    epgwidth = "250"

elif timedelta(hours=1) <= epgDuration <= timedelta(hours=1.5):
    epgwidth = "500"
Run Code Online (Sandbox Code Playgroud)

在时间差不在10-30分钟或1-1.5小时范围内的情况下,我给出epgwidth了一个默认值if.