1. 原因:使用dateutil的rrule时,计算速度比较慢

def axx():

from dateutil import rrule

received_time = datetime.datetime.strptime('2019-04-21 23:00:00', '%Y-%m-%d %H:%M:%S')

complete_time = datetime.datetime.strptime('2019-04-22 01:00:00', '%Y-%m-%d %H:%M:%S')

workdays = [x for x in range(7) if x not in [5, 6]]

time_period = rrule.rrule(rrule.MINUTELY, dtstart=received_time, until=complete_time, byweekday=workdays).count()

print(time_period)

2. 尝试使用pandas的bdate_range,但是发现只统计工作日天数,即便不足1天也是按1天算的,不符合需求,因为我要分钟

def xxa():

import pandas as pd

date = pd.bdate_range('2019-04-21 23:00:00', '2019-04-22 01:00:00', freq='min')

minutes = len(date)

print(minutes)

print(minutes/(60*60))

3. 从stackoverflow找到一个方法

def xax():

from business_duration import businessDuration

import pandas as pd

received_time = pd.to_datetime('2019-04-21 23:00:00')

complete_time = pd.to_datetime('2019-04-22 01:15:00')

period = businessDuration(received_time, complete_time, unit='min')

print(period)

4. 自己使用pandas写的,还需测试

def aaa():

import pandas as pd

# test case 1

# received_time = '2019-04-21 23:00:00'

# complete_time = '2019-04-22 01:00:00'

# received_time = '2019-04-19 23:00:00'

# complete_time = '2019-04-20 01:00:00'

# test case 2

# received_time = '2019-04-18 23:00:00'

# complete_time = '2019-04-20 01:00:00'

# received_time = '2019-04-21 23:00:00'

# complete_time = '2019-04-23 01:00:00'

# test case 3

# received_time = '2019-04-21 23:00:00'

# complete_time = '2019-04-24 01:00:00'

# received_time = '2019-04-18 23:00:00'

# complete_time = '2019-04-20 01:00:00'

# test case 5

received_time = '2019-04-19 23:00:00'

complete_time = '2019-04-22 01:00:00'

received_date = pd.to_datetime(received_time)

complete_date = pd.to_datetime(complete_time)

date_period = pd.bdate_range(received_time, complete_time)

if date_period[0] == date_period[-1]:

if date_period[0] > received_date:

start = date_period[0]

end = complete_date

else:

start = received_date

end = date_period[0] + datetime.timedelta(days=1)

day_time = len(pd.date_range(start, end, freq='min')) - 1

print('Workdays:' + str(day_time) + ' minutes')

else:

if (complete_date - date_period[-1]).days > 0:

end = date_period[-1] + datetime.timedelta(days=1)

else:

end = complete_date

if received_date < date_period[0]:

start = date_period[0]

else:

start = received_date

received_per = pd.date_range(start, date_period[0] + datetime.timedelta(days=1), freq='min')

complete_per = pd.date_range(date_period[-1], end, freq='min')

middle_time = (len(date_period) - 2) * 1440

days_time = len(received_per) + middle_time + len(complete_per) - 2

print('Workdays:' + str(days_time) + ' minutes')

参考:https://stackoverflow.com/questions/46899627/business-hours-between-two-dates-in-pandas-dataframe-including-holidays?rq=1

python时间计算_python计算两日期之间工作日时长相关推荐

  1. python时间显示_python脚本之日期格式显示

    脚本内容: #!/usr/bin/python #coding=utf-8 #根据给定的年月日以数字形式打印出日期 months =[ "January", "Febru ...

  2. Python计算两日期之间排除节假日与非上班时间的工作时间

    Python计算两日期之间排除节假日与非上班时间的工作时间 前言 一.基本思路 二.代码示例 总结 文章目录 前言 一.基本思路 二.代码示例 总结 前言 工作中遇见需要写UDF计算事项办理时间的需求 ...

  3. T-SQL 2 Tips: 1.计算任意两日期之间的周一到周日分别各有几个! 2.根据出生日期计算精确年龄!...

    这两个小技巧,不写不知道,一写吓一跳! 都是看似简单,实际做起来就懵,得仔细想一想,才能写对! 凡是有日期运算的程序都要细心哦! 先说第二个: 2.根据出生日期精确计算年龄!   所谓计算精确年龄就是 ...

  4. 计算两日期之间差多少天----日期格式为:yyyy-mm-dd

    计算两日期之间差多少天 日期格式为yyyy-mm-dd //计算日期差值的方法: //计算日期差值的方法: function getDaysBetween(dateString1, dateStrin ...

  5. 关于计算两日期之间经过多少天的超巧妙算法(转载)

    转载地址:https://www.cnblogs.com/cndccm/p/11974754.html 原创地址:https://blog.csdn.net/chinaeran/article/det ...

  6. 统计两日期之间星期一至星期日个数

    最近在做一个统计的相关功能,由于数据库表的设计比较特殊,其中有一个字段表示星期几.于是写了一个统计两日期之间星期一至星期日个数的功能. 入参形式为开始与结束对应时间的时间戳. 有不足之处,希望大佬指正 ...

  7. mysql 排除节假日_MYSQL 两日期之间的工作日(去掉周六日,不考虑节假日)_mysql...

    mysql 两日期之间的工作日(除去周六日,不考虑节假日) select (floor(days/7)*5+days%7 -case when 6 between wd and wd+days%7-1 ...

  8. Qt 之 WAV文件属性计算(比特率、文件大小、文件时长)

    简述 在 Qt 之 WAV文件解析 中给出了WAV文件属性的计算,具体包括文件大小.音频时长.比特率等属性,这里我们再次验证一下这些属性值的计算 . 在计算之前,我们要知道一下wav文件中的三个参数 ...

  9. python时间计算_python 计算一年内的所有周的具体日期详解

    #!/usr/bin/env python # -*- coding:utf-8 -*- import datetime import collections def date_list_fun(st ...

最新文章

  1. Javascript 基础知识之数据类型
  2. 关于USBOS V3.0 teamviewer13打开无反应的问题
  3. 在表示计算机内存储器容量时 1gb等于,在表示计算机内存储器容量时,1GB等于_________MB...
  4. java与java ee_Java EE拦截器
  5. ext/iconv/.libs/iconv.o: In function `_php_iconv_strlen'
  6. CVPR2021|引入记忆模块,突破长距离依赖视频预测的性能瓶颈
  7. 【转】一个安全测试的CheckList
  8. [转]SQL操作全集
  9. 商店管理系统——小组分工及索引卡
  10. npp夜光数据介绍 viirs_基于NPP-VIIRS夜间灯光数据的南宁市GDP空间化研究
  11. 12、阈值分割基础理论
  12. 硬盘接口类型简洁区别及SCSI设备和SCSI磁盘的概念区别
  13. LEWITT莱维特STREAM4x5、DGT260声卡安装调试教程
  14. 燕秀计算机打印区域文字高度,燕秀快捷键(全)
  15. 没有卑微的工作,只有卑微的工作态度
  16. 央行:个人征信基本实现金融信用信息广覆盖
  17. Python App 爬虫:豆果美食APP 菜谱爬取
  18. 运筹优化学习07:Lingo的 @if 函数的使用方法
  19. 真实的感情---可是你没有
  20. ESP32 学习笔记(二十二)睡眠模式

热门文章

  1. gRPC-rs:从 C 到 Rust 1
  2. HDU4506 小明系列故事——师兄帮帮忙
  3. iOS 开发周报:Apple 发布 iPhone 7 / 7 Plus 、Apple Watch 2 等新品
  4. iOS开发CoreAnimation解读之三——几种常用Layer的使用解析
  5. OSPF 邻接关系建立
  6. 各类防火墙应用对比分析
  7. 枣庄三中高考2021成绩查询,2021枣庄中考成绩查询系统入口
  8. linux 安装python-opencv
  9. 正则表达式里转义字符_五分钟搞定正则表达式,如果没搞定,再加两分钟
  10. php创建表并插入数据,php数据库操作-创建库和表以及插入数据