• 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的所有方法
  • 相关阅读:
    Android实战开发租赁管理软件(适配UI,数据的存储,多线程下载)课程分享
    随 机 数 算 法
    java 状态模式 解说演示样例代码
    数据挖掘 决策树算法 ID3 通俗演绎
    经常使用表单数据的验证方法
    编程基本功训练:流程图画法及练�
    log4net使用具体解释
    妄想性仮想人格障害 新手教程 +改动器
    使用VS插件在VS2012/2013上编辑和调试Quick-Cocos2d-x的Lua代码
    经典回忆Effective C++ 1
  • 原文地址:https://www.cnblogs.com/aaronthon/p/10311204.html
Copyright © 2020-2023  润新知