鱼C论坛

 找回密码
 立即注册
查看: 1632|回复: 4

[已解决]小白求助两个日期相减出错

[复制链接]
发表于 2021-3-26 10:52:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.想从excel读取日期数据,两个日期相减,但是报错,TypeError: '<' not supported between instances of 'str' and 'float',也不知道哪里格式错了
2.假如stime所指向的date是空的话,这种又该如何剔除?
附上源代码:
import xlrd
from datetime import datetime
from xlrd import xldate_as_tuple
#读取Excel文件
workbook = xlrd.open_workbook('D:\pylearning\DG逾期测试数据.xlsx')

#读取Excel文件中的第一个工作表
sheet1=workbook.sheet_by_index(0)  

for row in range(1,sheet1.nrows):
    #读取Excel表中的时间,并计算时间间隔
    stime = datetime(xldate_as_tuple(sheet1.cell_value(row,3),0)).strftime('%Y/%m/%d')
    etime = datetime(xldate_as_tuple(sheet1.cell_value(row, 4),0)).strftime('%Y/%m/%d')
    #strptime() 函数根据指定的格式把一个时间字符串解析为时间元组
    start = datetime.strptime(stime,'%Y/%m/%d')
    end = datetime.strptime(etime,'%Y/%m/%d')
    time=(end-start).days; #间隔天数
    print("%d逾期天数:%f天" %(row,time))

12INT_OVERDUE_DATEDT
ssss2020092820200930
sasa
20200930
aaaa2020092820200930







最佳答案
2021-3-26 11:11:58
本帖最后由 qq1151985918 于 2021-3-26 11:41 编辑

你Excel中的日期格式不对

26.png

代码改动了很多,你自己对照吧。
import xlrd
from datetime import datetime
from xlrd import xldate_as_tuple

#读取Excel文件
workbook = xlrd.open_workbook('test.xlsx')

#读取Excel文件中的第一个工作表
sheet1=workbook.sheet_by_index(0)  

for row in range(1,sheet1.nrows):
    #读取Excel表中的时间,并计算时间间隔
    stime = sheet1.cell(row, 2).value
    etime = sheet1.cell(row, 3).value
    #strptime() 函数根据指定的格式把一个时间字符串解析为时间元组
    if stime != "" and etime != "":
        start = datetime.strptime(stime,'%Y/%m/%d')
        end = datetime.strptime(etime,'%Y/%m/%d')
        time=(end-start).days; #间隔天数
        print("%d逾期天数:%d天" %(row,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-26 11:11:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 qq1151985918 于 2021-3-26 11:41 编辑

你Excel中的日期格式不对

26.png

代码改动了很多,你自己对照吧。
import xlrd
from datetime import datetime
from xlrd import xldate_as_tuple

#读取Excel文件
workbook = xlrd.open_workbook('test.xlsx')

#读取Excel文件中的第一个工作表
sheet1=workbook.sheet_by_index(0)  

for row in range(1,sheet1.nrows):
    #读取Excel表中的时间,并计算时间间隔
    stime = sheet1.cell(row, 2).value
    etime = sheet1.cell(row, 3).value
    #strptime() 函数根据指定的格式把一个时间字符串解析为时间元组
    if stime != "" and etime != "":
        start = datetime.strptime(stime,'%Y/%m/%d')
        end = datetime.strptime(etime,'%Y/%m/%d')
        time=(end-start).days; #间隔天数
        print("%d逾期天数:%d天" %(row,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-26 11:23:53 | 显示全部楼层
本帖最后由 jackz007 于 2021-3-26 11:25 编辑

        剔除空格
import xlrd
from datetime import datetime
from xlrd import xldate_as_tuple

workbook = xlrd.open_workbook('D:\pylearning\DG逾期测试数据.xlsx')

sheet1=workbook.sheet_by_index(0)  

for row in range(1 , sheet1 . nrows):
    if sheet1.cell_value(row , 3) . strip() and sheet1.cell_value(row , 4) . strip():         # 添加此行判断
        stime = datetime(xldate_as_tuple(sheet1.cell_value(row,3),0)).strftime('%Y/%m/%d')
        etime = datetime(xldate_as_tuple(sheet1.cell_value(row, 4),0)).strftime('%Y/%m/%d')
        start = datetime.strptime(stime,'%Y/%m/%d')
        end = datetime.strptime(etime,'%Y/%m/%d')
        time=(end-start).days; #间隔天数
        print("%d逾期天数:%f天" %(row,time))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-26 11:54:14 | 显示全部楼层

非常感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-26 11:54:50 | 显示全部楼层
qq1151985918 发表于 2021-3-26 11:11
你Excel中的日期格式不对

非常感谢!已经运行成功了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 07:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表