前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >帮老婆系列-关于计算Excel表去除指定时间段后的时间差

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

作者头像
python与大数据分析
发布2022-05-19 12:23:48
1.5K0
发布2022-05-19 12:23:48
举报
文章被收录于专栏:python与大数据分析

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

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

Excel计算时间差的几个步骤

1、将date和time进行分割

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

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

4、计算date日期差

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

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

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

代码语言:javascript
复制
import datetime

format = '%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=excludestart
    elif curtimestr>excludeend:
        curtimestr=excludeend
    return curtimestr

for 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 * 24
    print('日期差小时数=',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.0
    print('时间差小时数=',timedif,type(timedif))
    totaldif=datedif+timedif
    print('总时间差小时数=',totaldif)

运行结果输出如下

代码语言:javascript
复制
# ------------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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python与大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档