python获取两个日期间的工作日

import datetime
# 计算两个日期之间的工作日数,非天数.
class workDays():
    def __init__(self, start_date, end_date, days_off=None):
        """days_off:休息日,默认周六日, 以0(星期一)开始,到6(星期天)结束, 传入tupple
        没有包含法定节假日,
        """
        self.start_date = start_date
        self.end_date = end_date
        self.days_off = days_off
        if self.start_date > self.end_date:
            self.start_date,self.end_date = self.end_date, self.start_date
        if days_off is None:
            self.days_off = 5,6
        # 每周工作日列表
        self.days_work = [x for x in range(7) if x not in self.days_off]

    def workDays(self):
        """实现工作日的 iter, 从start_date 到 end_date , 如果在工作日内,yield 日期
        """
        # 还没排除法定节假日
        tag_date = self.start_date
        while True:
            if tag_date > self.end_date:
                break
            if tag_date.weekday() in self.days_work:
                yield tag_date
            tag_date += datetime.timedelta(days=1)

    def daysCount(self):
        """工作日统计,返回数字"""
        return len(list(self.workDays()))

    def weeksCount(self, day_start=0):
        """统计所有跨越的周数,返回数字
        默认周从星期一开始计算
        """
        day_nextweek = self.start_date
        while True:
            if day_nextweek.weekday() == day_start:
                break
            day_nextweek += datetime.timedelta(days=1)
        # 区间在一周内
        if day_nextweek > self.end_date:
            return 1
        weeks = ((self.end_date - day_nextweek).days + 1)/7
        weeks = int(weeks)
        if ((self.end_date - day_nextweek).days + 1)%7:
            weeks += 1
        if self.start_date < day_nextweek:
            weeks += 1
        return weeks

获取结果:

import datetime
startdate = datetime.datetime(2018,1,11,20,20,20)
enddate = datetime.datetime(2019,1,11,20,20,20)
work = workDays(startdate,enddate)  # 需要传入两个datetime格式日期
print(list(work.workDays()))  # 获取一个元素为datetime日期格式的工作日期列表
print(work.daysCount())  # 获取工作日期的天数
print(work.weeksCount())  # 获取非工作日的天数
for i in work.workDays():  # 获取每一个工作日期
    print(i)
print(dir(work))  # 获取work的所有方法

原文地址:https://www.cnblogs.com/aaronthon/p/10311204.html

时间: 2024-10-15 03:33:56

python获取两个日期间的工作日的相关文章

获取两个日期间的所有日期

/** ***获取两个日期间的所有日期 ***默认start<end **/ getBetweenDateStr('2017-07-08','2017-07-22'); function getBetweenDateStr(start,end){ var result = []; var beginDay = start.split("-"); var endDay = end.split("-"); var diffDay = new Date(); var

[Java] 获取两个日期间的所有日期

def GetDates(String startDate, String endDate){  Date d1 = new SimpleDateFormat("yyyyMMdd").parse(startDate);//定义起始日期  Date d2 = new SimpleDateFormat("yyyyMMdd").parse(endDate);//定义结束日期  Calendar dd = Calendar.getInstance();//定义日期实例  d

SQL Server 获取两个日期间的日期

declare @start datetime declare @end datetime set @start = '2018-01-25' set @end = '2018-02-03' select dateadd(dd,num,@start) FROM (SELECT ROW_NUMBER() OVER (ORDER BY ID)-1 AS num FROM sysobjects) KK where dateadd(dd,num,@start) <[email protected] --

Python获取两个ip之间的所有ip

int_ip = lambda x: '.'.join([str(x/(256**i)%256) for i in range(3,-1,-1)]) ip_int = lambda x:sum([256**j*int(i) for j,i in enumerate(x.split('.')[::-1])]) def get_ips(ip1,ip2): f=open('ips.txt','w') ip1_num = ip_int(ip1) ip2_num = ip_int(ip2) for i i

python获取两个dict的不同

参数: dict1, dict2 需求:如果dict1和dict2中有不同的key,那么返回这个(key, dict1[key]):如果dict1和dict2中有相同的key,但是value不同,返回这个(key, dict1[key]) 实现: def dict_different_data(first, second): """ get the different data bewtten two dicts objects return :result = first

输入一个日期,判断这个日期在一年中是哪一天,是星期几,计算两个日期间的天数,使用字符串输出日期

之前写了一个博文(http://blog.csdn.net/shiwazone/article/details/45053739)是用基本函数实现的,这次使用类的设计方法,也就是面向对象的方法改写一下,并加入了日期转换成字符串的实现.这里的程序也可以解决编程珠玑习题3.4的问题. #include"calendar.h" int main() { Time t; t.initialTime(); t.Show(); t.StrShow(); Time t1; t1.initialTim

oracle中用SQL实现两个日期间的日期形成一个数据集

比如输入2014-06-1 和 2014-07-1形成一个2014-06-1 2014-06-22014-06-3...2014-07-1 的数据集. 解决方法: select date'2014-06-01'+rownum-1 as my_numbersfrom dualconnect by level <= (date'2014-07-01' - date'2014-06-01') + 1 date 和to_date功能一样 select to_date('2014-06-01','yyyy

Java 两个日期间的天数计算

在Java中计算两个日期间的天数,大致有2种方法:一是使用原生JDK进行计算,在JDK8中提供了更为直接和完善的方法:二是使用第三方库. 1.使用原生的JDK [java] view plain copy print? private static long daysBetween(Date one, Date two) { long difference =  (one.getTime()-two.getTime())/86400000; return Math.abs(difference)

JavaScript如何计算两个日期间的时间差

有时候我们需要知道两个日期之间差了多少天,多少小时,甚至多少分钟多少秒.下面我们用JavaScript实现一个函数,用于计算两个日期的时间差,先来看看代码: 01 <script type="text/javascript"> 02   03 /** 04 * 时间对象的格式化; 05 */ 06 Date.prototype.format = function(format){ 07  /* 08   * eg:format="YYYY-MM-dd hh:mm: