老婆给了个小小的任务,说是把工单的有效流转时长给计算出来,工单的有效流转时长=工单的开始时间-工单的结束时间-非工作时间段,看起来很简单的一件事情,耗费了我好几个小时,又用了个把小时用python实现了一遍。

首先数据是Excel表,自然首先想到的是Excel函数,Excel函数的缺点是日期计算和时间计算是分开的,想了一下还是从网络上找一些现成的公式吧,找了十几个公式,测试了半天,发现都多少有些问题,还是自己开撸吧。

Excel计算时间差的几个步骤

1、将date和time进行分割

2、将time进行标准化,如果时间在指定时间段之内,用该时间,否则取大或取小,突然想起来,还是可以持续优化的。

3、计算标准化的time时间差,多出来的天数才算天数

4、计算date日期差

5、将日期差*12小时+时间差=有效工作时间

python实现的方式和excel如出一辙,看一下excel处理步骤,python也是一样的。

吐槽一下,python对datetime时间的支持不敢恭维。

import datetimeformat = '%Y-%m-%d %H:%M:%S'
excludestart='08:00:00'
excludeend='20:00:00'
startdts=["2022-03-06 01:52:51","2022-03-06 01:52:51","2022-03-06 01:52:51","2022-03-06 01:52:51","2022-03-06 01:52:51","2022-03-06 01:52:51"]
enddts=["2022-03-06 03:52:51","2022-03-06 10:52:51","2022-03-06 21:52:51","2022-03-07 04:52:51","2022-03-07 12:52:51","2022-03-07 20:52:51"]def returndate(curtimestr):if curtimestr<excludestart:curtimestr=excludestartelif curtimestr>excludeend:curtimestr=excludeendreturn curtimestrfor i in range(len(startdts)):start=datetime.datetime.strptime(startdts[i],format)end = datetime.datetime.strptime(enddts[i], format)print('------------compute the timediff between {} and {}---------------'.format(start,end))startdatestr=startdts[i][0:10]startimestr=startdts[i][11:19]enddatestr = enddts[i][0:10]endtimestr = enddts[i][11:19]print('before format ',startimestr,'~',endtimestr)startimestr=returndate(startimestr)endtimestr=returndate(endtimestr)print('after format ',startimestr,'~',endtimestr)startday=start.date()endday=end.date()datedif=(endday - startday).days * 24print('日期差小时数=',datedif)starttime= datetime.datetime.strptime(startimestr, "%H:%M:%S")endtime=datetime.datetime.strptime(endtimestr, "%H:%M:%S")print(starttime,type(starttime))timedif=((endtime- starttime).seconds)/60/60.0print('时间差小时数=',timedif,type(timedif))totaldif=datedif+timedifprint('总时间差小时数=',totaldif)

运行结果输出如下

# ------------compute the timediff between 2022-03-06 01:52:51 and 2022-03-06 03:52:51---------------
# before format  01:52:51 ~ 03:52:51
# after format  08:00:00 ~ 08:00:00
# 日期差小时数= 0
# 1900-01-01 08:00:00 <class 'datetime.datetime'>
# 时间差小时数= 0.0 <class 'float'>
# 总时间差小时数= 0.0
# ------------compute the timediff between 2022-03-06 01:52:51 and 2022-03-06 10:52:51---------------
# before format  01:52:51 ~ 10:52:51
# after format  08:00:00 ~ 10:52:51
# 日期差小时数= 0
# 1900-01-01 08:00:00 <class 'datetime.datetime'>
# 时间差小时数= 2.8808333333333334 <class 'float'>
# 总时间差小时数= 2.8808333333333334
# ------------compute the timediff between 2022-03-06 01:52:51 and 2022-03-06 21:52:51---------------
# before format  01:52:51 ~ 21:52:51
# after format  08:00:00 ~ 20:00:00
# 日期差小时数= 0
# 1900-01-01 08:00:00 <class 'datetime.datetime'>
# 时间差小时数= 12.0 <class 'float'>
# 总时间差小时数= 12.0
# ------------compute the timediff between 2022-03-06 01:52:51 and 2022-03-07 04:52:51---------------
# before format  01:52:51 ~ 04:52:51
# after format  08:00:00 ~ 08:00:00
# 日期差小时数= 24
# 1900-01-01 08:00:00 <class 'datetime.datetime'>
# 时间差小时数= 0.0 <class 'float'>
# 总时间差小时数= 24.0
# ------------compute the timediff between 2022-03-06 01:52:51 and 2022-03-07 12:52:51---------------
# before format  01:52:51 ~ 12:52:51
# after format  08:00:00 ~ 12:52:51
# 日期差小时数= 24
# 1900-01-01 08:00:00 <class 'datetime.datetime'>
# 时间差小时数= 4.880833333333333 <class 'float'>
# 总时间差小时数= 28.880833333333335
# ------------compute the timediff between 2022-03-06 01:52:51 and 2022-03-07 20:52:51---------------
# before format  01:52:51 ~ 20:52:51
# after format  08:00:00 ~ 20:00:00
# 日期差小时数= 24
# 1900-01-01 08:00:00 <class 'datetime.datetime'>
# 时间差小时数= 12.0 <class 'float'>
# 总时间差小时数= 36.0

最后,谢谢关注,谢谢支持!

帮老婆系列-关于计算Excel表去除指定时间段后的时间差相关推荐

  1. Python xlrd将excel表的指定数据copy到另一个excel表格中

    要复制excel表的内容: 分别在第15.16.17.18.19列 第二张的excel表格: 代码部分: import xlrd from datetime import datetime from ...

  2. java 修改Excel表 在指定位置插入行列

    import com.spire.xls.*;public static void main(String[] args) {addRowCol();}public static void addRo ...

  3. 如何让Excel表使用一次后即自我销毁?

    文件要打开看过后就自动删除,如何通过VBA程序来实现呢? 解决方案:将文件的ChangeFileAccess属性设置为只读,即xlReadOnly,然后通过Kill代码删除文件即可.不过为了确保用户可 ...

  4. Word 邮件合并功能(Excel表中指定列数据插入到Word模板指定位置,批量生成Word)

    [邮件]选项卡[开始邮件合并]下拉按钮,选择[邮件合并分布向导] 在"邮件合并"任务窗格中的"选择文档类型"中选择"信函",单击" ...

  5. Python xlwt,xlrd对Excel表求笛卡尔积

    Python xlwt,xlrd对Excel表求笛卡尔积 应用背景 待处理的Excel表单模版 处理后导出的Excel效果 具体代码实现 应用背景 前些日子,在项目中遇到多级分类合并问题,每一级分类格 ...

  6. Python实现excel表合入

    import logging import datetime import os import sys import openpyxl import tkinter as Tk# 将该表的数据汇总到另 ...

  7. arcgis怎么关联excel表_arcgis中如何跟excel连接?

    展开全部 一:arcgis属性表与excel建立连接: 1):原始数据属性表如图: excel表数据如下:32313133353236313431303231363533e58685e5aeb9313 ...

  8. arcgis怎么关联excel表_在arcgis中添加excel表格数据-ArcGIS如何将Excel里的数据关联至地图上...

    ArcGIS如何将Excel里的数据关联至地图上 1.打开一个arcgis工程文件. 2.在左侧窗口中右击面要素文件,选择"open attribute table". 3.在出现 ...

  9. 解决如何使用layui导入Excel表数据

    解决如何使用layui导入Excel表数据 1.前端页面html代码展示 <button type="button" lay-submit="" clas ...

最新文章

  1. 少一些计较多_新的一年:少一分计较,多一分宽容
  2. Win7备份的取消与磁盘空间恢复
  3. 甲骨文全球大会——看SOA
  4. JS:2.1,流程控制(if,switch)高级
  5. 截屏悬浮软件_吹爆的软件,准确率太强了!
  6. 算法面试题解答(六)
  7. 最小化安装的redhat/centos安装gnome桌面
  8. 监测系统的cpu,物理内存,磁盘的使用
  9. JSON对象和JSON数组
  10. 左耳朵耗子 | 程序员如何用技术变现?
  11. 解决solidworks导入stl文件就卡死的问题
  12. 华师大计算机在线测试,华东师大:180道心理测试题面试免费师范生
  13. 关于非诚勿扰百度专场
  14. 2023年天津仁爱学院专升本动画、化学工程与工艺专业介绍
  15. 立创开源 | 基于Blinker点灯的智能物联网开关-给你的电器升级
  16. 如何判定苹果开发者账号属于哪个国家?
  17. ndn-cxx与nfd的安装
  18. CSS3 animation-fill-mode详解
  19. 谈技术文章翻译的信雅达-上
  20. 一篇让你熟练掌握Java常用工具包(全网最全)

热门文章

  1. AI前沿论坛会议—文字智能和游戏智能总结篇
  2. 华为HCIP RS题库221 451-460题
  3. 圣诞节要到了,如何制作自己的一个给头像戴帽子的小程序,请看这
  4. Protobuf报错CHECK failed: GeneratedDatabase()->Add(encoded_file_descriptor, size):
  5. 金融计算器,python实现
  6. WFP(三)——编译、部署驱动文件*.sys——微软msnmntr项目
  7. 用GEPHI绘制的 我的微博 好友 关系 与 好友的好友关系图
  8. android发送http post请求函数带参数带返回数据 静态类 源码
  9. linux拷贝文件断电后丢失,linux突然断电重启,配置文件丢失/程序无法打开/文件损坏...
  10. input输入邮箱使用正则限制正确格式的邮箱地址