python时间计算_python计算两日期之间工作日时长
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计算两日期之间工作日时长相关推荐
- python时间显示_python脚本之日期格式显示
脚本内容: #!/usr/bin/python #coding=utf-8 #根据给定的年月日以数字形式打印出日期 months =[ "January", "Febru ...
- Python计算两日期之间排除节假日与非上班时间的工作时间
Python计算两日期之间排除节假日与非上班时间的工作时间 前言 一.基本思路 二.代码示例 总结 文章目录 前言 一.基本思路 二.代码示例 总结 前言 工作中遇见需要写UDF计算事项办理时间的需求 ...
- T-SQL 2 Tips: 1.计算任意两日期之间的周一到周日分别各有几个! 2.根据出生日期计算精确年龄!...
这两个小技巧,不写不知道,一写吓一跳! 都是看似简单,实际做起来就懵,得仔细想一想,才能写对! 凡是有日期运算的程序都要细心哦! 先说第二个: 2.根据出生日期精确计算年龄! 所谓计算精确年龄就是 ...
- 计算两日期之间差多少天----日期格式为:yyyy-mm-dd
计算两日期之间差多少天 日期格式为yyyy-mm-dd //计算日期差值的方法: //计算日期差值的方法: function getDaysBetween(dateString1, dateStrin ...
- 关于计算两日期之间经过多少天的超巧妙算法(转载)
转载地址:https://www.cnblogs.com/cndccm/p/11974754.html 原创地址:https://blog.csdn.net/chinaeran/article/det ...
- 统计两日期之间星期一至星期日个数
最近在做一个统计的相关功能,由于数据库表的设计比较特殊,其中有一个字段表示星期几.于是写了一个统计两日期之间星期一至星期日个数的功能. 入参形式为开始与结束对应时间的时间戳. 有不足之处,希望大佬指正 ...
- mysql 排除节假日_MYSQL 两日期之间的工作日(去掉周六日,不考虑节假日)_mysql...
mysql 两日期之间的工作日(除去周六日,不考虑节假日) select (floor(days/7)*5+days%7 -case when 6 between wd and wd+days%7-1 ...
- Qt 之 WAV文件属性计算(比特率、文件大小、文件时长)
简述 在 Qt 之 WAV文件解析 中给出了WAV文件属性的计算,具体包括文件大小.音频时长.比特率等属性,这里我们再次验证一下这些属性值的计算 . 在计算之前,我们要知道一下wav文件中的三个参数 ...
- python时间计算_python 计算一年内的所有周的具体日期详解
#!/usr/bin/env python # -*- coding:utf-8 -*- import datetime import collections def date_list_fun(st ...
最新文章
- Javascript 基础知识之数据类型
- 关于USBOS V3.0 teamviewer13打开无反应的问题
- 在表示计算机内存储器容量时 1gb等于,在表示计算机内存储器容量时,1GB等于_________MB...
- java与java ee_Java EE拦截器
- ext/iconv/.libs/iconv.o: In function `_php_iconv_strlen'
- CVPR2021|引入记忆模块,突破长距离依赖视频预测的性能瓶颈
- 【转】一个安全测试的CheckList
- [转]SQL操作全集
- 商店管理系统——小组分工及索引卡
- npp夜光数据介绍 viirs_基于NPP-VIIRS夜间灯光数据的南宁市GDP空间化研究
- 12、阈值分割基础理论
- 硬盘接口类型简洁区别及SCSI设备和SCSI磁盘的概念区别
- LEWITT莱维特STREAM4x5、DGT260声卡安装调试教程
- 燕秀计算机打印区域文字高度,燕秀快捷键(全)
- 没有卑微的工作,只有卑微的工作态度
- 央行:个人征信基本实现金融信用信息广覆盖
- Python App 爬虫:豆果美食APP 菜谱爬取
- 运筹优化学习07:Lingo的 @if 函数的使用方法
- 真实的感情---可是你没有
- ESP32 学习笔记(二十二)睡眠模式
热门文章
- gRPC-rs:从 C 到 Rust 1
- HDU4506 小明系列故事——师兄帮帮忙
- iOS 开发周报:Apple 发布 iPhone 7 / 7 Plus 、Apple Watch 2 等新品
- iOS开发CoreAnimation解读之三——几种常用Layer的使用解析
- OSPF 邻接关系建立
- 各类防火墙应用对比分析
- 枣庄三中高考2021成绩查询,2021枣庄中考成绩查询系统入口
- linux 安装python-opencv
- 正则表达式里转义字符_五分钟搞定正则表达式,如果没搞定,再加两分钟
- php创建表并插入数据,php数据库操作-创建库和表以及插入数据