鱼C论坛

 找回密码
 立即注册
查看: 2064|回复: 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

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

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

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

  8. for row in range(1,sheet1.nrows):
  9.     #读取Excel表中的时间,并计算时间间隔
  10.     stime = sheet1.cell(row, 2).value
  11.     etime = sheet1.cell(row, 3).value
  12.     #strptime() 函数根据指定的格式把一个时间字符串解析为时间元组
  13.     if stime != "" and etime != "":
  14.         start = datetime.strptime(stime,'%Y/%m/%d')
  15.         end = datetime.strptime(etime,'%Y/%m/%d')
  16.         time=(end-start).days; #间隔天数
  17.         print("%d逾期天数:%d天" %(row,
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

你Excel中的日期格式不对

26.png

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

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

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

  8. for row in range(1,sheet1.nrows):
  9.     #读取Excel表中的时间,并计算时间间隔
  10.     stime = sheet1.cell(row, 2).value
  11.     etime = sheet1.cell(row, 3).value
  12.     #strptime() 函数根据指定的格式把一个时间字符串解析为时间元组
  13.     if stime != "" and etime != "":
  14.         start = datetime.strptime(stime,'%Y/%m/%d')
  15.         end = datetime.strptime(etime,'%Y/%m/%d')
  16.         time=(end-start).days; #间隔天数
  17.         print("%d逾期天数:%d天" %(row,
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

        剔除空格
  1. import xlrd
  2. from datetime import datetime
  3. from xlrd import xldate_as_tuple

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

  5. sheet1=workbook.sheet_by_index(0)  

  6. for row in range(1 , sheet1 . nrows):
  7.     if sheet1.cell_value(row , 3) . strip() and sheet1.cell_value(row , 4) . strip():         # 添加此行判断
  8.         stime = datetime(xldate_as_tuple(sheet1.cell_value(row,3),0)).strftime('%Y/%m/%d')
  9.         etime = datetime(xldate_as_tuple(sheet1.cell_value(row, 4),0)).strftime('%Y/%m/%d')
  10.         start = datetime.strptime(stime,'%Y/%m/%d')
  11.         end = datetime.strptime(etime,'%Y/%m/%d')
  12.         time=(end-start).days; #间隔天数
  13.         print("%d逾期天数:%f天" %(row,time))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

非常感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

非常感谢!已经运行成功了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-26 02:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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