帮老婆系列-关于计算Excel表去除指定时间段后的时间差
老婆给了个小小的任务,说是把工单的有效流转时长给计算出来,工单的有效流转时长=工单的开始时间-工单的结束时间-非工作时间段,看起来很简单的一件事情,耗费了我好几个小时,又用了个把小时用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表去除指定时间段后的时间差相关推荐
- Python xlrd将excel表的指定数据copy到另一个excel表格中
要复制excel表的内容: 分别在第15.16.17.18.19列 第二张的excel表格: 代码部分: import xlrd from datetime import datetime from ...
- java 修改Excel表 在指定位置插入行列
import com.spire.xls.*;public static void main(String[] args) {addRowCol();}public static void addRo ...
- 如何让Excel表使用一次后即自我销毁?
文件要打开看过后就自动删除,如何通过VBA程序来实现呢? 解决方案:将文件的ChangeFileAccess属性设置为只读,即xlReadOnly,然后通过Kill代码删除文件即可.不过为了确保用户可 ...
- Word 邮件合并功能(Excel表中指定列数据插入到Word模板指定位置,批量生成Word)
[邮件]选项卡[开始邮件合并]下拉按钮,选择[邮件合并分布向导] 在"邮件合并"任务窗格中的"选择文档类型"中选择"信函",单击" ...
- Python xlwt,xlrd对Excel表求笛卡尔积
Python xlwt,xlrd对Excel表求笛卡尔积 应用背景 待处理的Excel表单模版 处理后导出的Excel效果 具体代码实现 应用背景 前些日子,在项目中遇到多级分类合并问题,每一级分类格 ...
- Python实现excel表合入
import logging import datetime import os import sys import openpyxl import tkinter as Tk# 将该表的数据汇总到另 ...
- arcgis怎么关联excel表_arcgis中如何跟excel连接?
展开全部 一:arcgis属性表与excel建立连接: 1):原始数据属性表如图: excel表数据如下:32313133353236313431303231363533e58685e5aeb9313 ...
- arcgis怎么关联excel表_在arcgis中添加excel表格数据-ArcGIS如何将Excel里的数据关联至地图上...
ArcGIS如何将Excel里的数据关联至地图上 1.打开一个arcgis工程文件. 2.在左侧窗口中右击面要素文件,选择"open attribute table". 3.在出现 ...
- 解决如何使用layui导入Excel表数据
解决如何使用layui导入Excel表数据 1.前端页面html代码展示 <button type="button" lay-submit="" clas ...
最新文章
- 少一些计较多_新的一年:少一分计较,多一分宽容
- Win7备份的取消与磁盘空间恢复
- 甲骨文全球大会——看SOA
- JS:2.1,流程控制(if,switch)高级
- 截屏悬浮软件_吹爆的软件,准确率太强了!
- 算法面试题解答(六)
- 最小化安装的redhat/centos安装gnome桌面
- 监测系统的cpu,物理内存,磁盘的使用
- JSON对象和JSON数组
- 左耳朵耗子 | 程序员如何用技术变现?
- 解决solidworks导入stl文件就卡死的问题
- 华师大计算机在线测试,华东师大:180道心理测试题面试免费师范生
- 关于非诚勿扰百度专场
- 2023年天津仁爱学院专升本动画、化学工程与工艺专业介绍
- 立创开源 | 基于Blinker点灯的智能物联网开关-给你的电器升级
- 如何判定苹果开发者账号属于哪个国家?
- ndn-cxx与nfd的安装
- CSS3 animation-fill-mode详解
- 谈技术文章翻译的信雅达-上
- 一篇让你熟练掌握Java常用工具包(全网最全)
热门文章
- AI前沿论坛会议—文字智能和游戏智能总结篇
- 华为HCIP RS题库221 451-460题
- 圣诞节要到了,如何制作自己的一个给头像戴帽子的小程序,请看这
- Protobuf报错CHECK failed: GeneratedDatabase()->Add(encoded_file_descriptor, size):
- 金融计算器,python实现
- WFP(三)——编译、部署驱动文件*.sys——微软msnmntr项目
- 用GEPHI绘制的 我的微博 好友 关系 与 好友的好友关系图
- android发送http post请求函数带参数带返回数据 静态类 源码
- linux拷贝文件断电后丢失,linux突然断电重启,配置文件丢失/程序无法打开/文件损坏...
- input输入邮箱使用正则限制正确格式的邮箱地址