眼睛都要挣不开了,代码还有很多需要改进的地方,暂时先把方法放上,明天再整理

# _*_ coding:utf-8 _*_# Author: dai bing# Date: 2020/12/13 22:48# Scripts: calcworkday.py# Desc: 给定两个日期区间,计算区间内的工作日# 需要排除法定节假日以及统计休息日内调整为工作日内的天数# 给定人数计算出需要多少个任务满足报工需求#import datetimeimport timeclass Tasks:    weeks = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']    pattern = "%Y-%m-%d"    def __init__(self):        super(Tasks, self).__init__()        self._person = None        self._start_date = None        self._end_date = None        self._statutory_holidays = None        self._non_rest_days = None    @property    def person(self):        return self._person    @person.setter    def person(self, value):        self._person = value    @property    def startDate(self):        return self._start_date    @startDate.setter    def startDate(self, value):        sdate = None        try:            if isinstance(value, str):                sdate = datetime.datetime.strptime(value, self.pattern)            else:                raise Exception        except Exception as e:            print("输入值{}类型为{},需要输入日期型字符串或日期型数组.".format(value, type(value)))            print(e)            exit(11)        self._start_date = sdate    @property    def endDate(self):        return self._end_date    @endDate.setter    def endDate(self, value):        edate = None        try:            if isinstance(value, str):                edate = datetime.datetime.strptime(value, self.pattern)            else:                raise Exception        except Exception as e:            print("输入值{}类型为{},需要输入日期型字符串或日期型数组.".format(value, type(value)))            print(e)            exit(12)        self._end_date = edate    @property    def statutoryHolidays(self):        return self._statutory_holidays    @statutoryHolidays.setter    def statutoryHolidays(self, value):        change_statutory_holidays = []        try:            if isinstance(value, list):                for sholiday in value:                    # print(datetime.datetime.strptime(sholiday, pattern))                    change_statutory_holidays.append(datetime.datetime.strptime(sholiday, self.pattern))            elif isinstance(value, str):                change_statutory_holidays.append(datetime.datetime.strptime(value, self.pattern))        except ValueError:            print("输入值{}类型为{},需要输入日期型字符串或日期型数组.".format(value, type(value)))            exit(13)        self._statutory_holidays = change_statutory_holidays    @property    def nonRestDay(self):        return self._non_rest_days    @nonRestDay.setter    def nonRestDay(self, value):        change_work_day = []        pattern = "%Y-%m-%d"        try:            if isinstance(value, list):                for non_work_day in value:                    change_work_day.append(datetime.datetime.strptime(non_work_day, pattern))            elif isinstance(value, str):                change_work_day.append(datetime.datetime.strptime(value, pattern))        except TypeError:            print("输入值{}类型为{},需要输入日期型字符串或日期型数组.".format(value, type(value)))            exit(14)        self._non_rest_days = change_work_day    # 计算指定日期区间内的工作日    # statutory_h排除法定节假日    # work_do休息日调休变更为工作日    def getWorkDay(self, statutory_h, work_do):        day_off = 5, 6        # print(day_off)        days_work = [x for x in range(7) if x not in day_off]                # 排除法定节假日        statutory_holidays = statutory_h        # 增加调休工作日        non_rest_days = work_do        # print("statutory_holidays: ", len(statutory_holidays))        # print("work_day_off:", len(work_day_off))        tag_date = self.startDate        flag = 0        while True:            if tag_date > self.endDate:                break            if tag_date.weekday() in days_work and tag_date not in statutory_holidays or tag_date in non_rest_days:                yield tag_date            tag_date += datetime.timedelta(days=1)        # print(days_work)        # print("flag:", flag)    def getjobs(self):        jobs = 1        coefficient = 1        while True:            coefficient = 113 * jobs / int(self.daysCount()) / self.person            jobs += 1            # print("coefficient:{},jobs:{}".format(coefficient, jobs))            if coefficient > 4:                if coefficient < 5:                    print("[{}]{}月份共有{}位需要报工人员,需要{}个任务拆分进行报工。"                          .format(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),                                  datetime.datetime.now().month + 1, self.person, jobs))                    break    def daysCount(self):        """工作日统计,返回数字"""        return len(list(self.getWorkDay(self.statutoryHolidays, self.nonRestDay)))if __name__ == "__main__":    print(__name__)
©著作权归作者所有:来自51CTO博客作者good_joe的原创作品,如需转载,请注明出处,否则将追究法律责任

好知识,才能预见未来

赞赏

0人进行了赞赏支持

更多相关文章

  1. Java 8 日期/时间 API
  2. AngularJS 日期时间选择组件(附详细使用方法)
  3. 死磕18个Java8日期处理,工作必用!赶紧收藏起来!
  4. Excel函数(4)日期、文本函数
  5. 30例 | 一文搞懂python日期时间处理
  6. 全网最全!彻底弄透Java处理GMT/UTC日期时间
  7. 时间序列&日期学习笔记大全(上)
  8. Pandas小册子:日期数据处理 - 如何按日期筛选、显示及统计数据
  9. PHP常用日期时间操作合集

随机推荐

  1. Mac Error Create Android Project - “E
  2. android 设置缓存工具类
  3. Android Studio 使用github
  4. okhttp源码学习分析一
  5. android休眠与唤醒驱动流程分析
  6. android之location01
  7. radiolog不全的问题
  8. android webview js交互 (java和js交互)
  9. 相对布局
  10. android 屏幕测试程序 测试R G B三色 和