需求:因每月1-3号以及上月末最后1天共4天必须上班。现需要用Python编写一段程序判断某年需要加班的日期,需要考虑元旦,五一,十一假期。还需要考虑输入年份是否为平闰年,判断对应2月的天数。
(放假规则说明:
如五月1日:
在周一,则休息日为上周六七及本周一,无需补班。
在周二,则休息日为上周日加本周一二,上周六需补班。
在周三,则休息日为二三四,休假前的周日与休假后的周六各补班一天。
在周四,则休息日为四五六,本周日需要补班。
在五六日,则休息日为五六日,不需补班。

元旦与劳动节规则一样。

十月一日:
每年固定休假为1-7日。
如1号在周一,则上周六七需要补班,
其它则需要在假期前一周周六及假期后一周周末各补班1天。

其余月份则判断是否在周末决定是否需要加班。
)

结果:
1.展现某年需要加班的日期。
2.展示元旦,五一,十一的假期日期和补班日期

注:(扩展)需要考虑程序灵活性及可扩展性(如休假日期改为月末最后2天和月初2天,或者指定端午等农历节日对应的阳历,展示对应休假日期).

代码编程主要逻辑:
1.先定义一个字典,然后对字典进行排序:
注:这里对字典排序写的不是很好,因为当时还不会key=lambda排序。所以对月份1月写1,而不是01。(这里是个坑,因为在后续生成当年是日期的时候又处理的很啰嗦,专门又给1转换为了01.)

dict_date = {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}
sorted(dict_date)

2.定义函数,判断是否为闰年,如果是闰年,将对2月28日改为29。然后根据当年的第几天,生成对应的日期。如:1,生成的日期为20190101。

def int_t_date(daycnt, year='2019 '):"""根据天数返回当年的日期:param daycnt::param year::return:"""# 判断是否为闰年if int(year) % 100 == 0:if int(year) % 400 == 0:dict_date[2] = 29else:passelif int(year) % 4 == 0:dict_date[2] = 29else:passmonth = 0day = 0cnt = 0for x, y in dict_date.items():cnt += yif cnt < int(daycnt):passelif cnt == int(daycnt) and x == 1:month = xday = int(daycnt)breakelse:month = xday = int(daycnt) - cnt + ybreakif len(str(month)) == 1 and len(str(day)) == 1:return str(year) + "0" + str(month) + "0" + str(day)elif len(str(month)) == 1:return str(year) + "0" + str(month) + str(day)elif len(str(day)) == 1:return str(year) + str(month) + "0" + str(day)else:return str(year) + str(month) + str(day)

3.定义函数传入列表日期,判断每年的加班日期,结果存入到列表jbrq中:
注:这就是当时的坑,因为定义列表排序问题,导致单独处理日期,进行拼接0。

def jbsd_ls(list_day, current_year):"""取出每月加班时段:param list_day::param current_year::return:"""if list_day[-1][6:] in ['01']:if list_day[-1][4:] == '0101':# 对于每年1月1日进行特殊处理取前一年年底jbrq = list_day[-1:]jbrq.insert(0, str(int(current_year) - 1) + '1231')jbrq.insert(2, str(int(list_day[-1]) + 1))jbrq.insert(3, str(int(list_day[-1]) + 2))return jbrqelse:jbrq = list_day[-2:]jbrq.insert(2, str(int(list_day[-1]) + 1))jbrq.insert(3, str(int(list_day[-1]) + 2))return jbrq

4.判断法定节假日为3天假期的放假规则(元旦除外,因为元旦可能涉及到前1年的天数):

def check_holiday_3(list_a, list_day):"""对于法定节假日判断放假日期及补班日期(元旦、国庆、春节除外):param list_a::param list_day::param jbsd::return:"""week = datetime.datetime.strptime(list_a, "%Y%m%d").weekday()if week == 0:  # 周一print("不需补班")print("放假日期为:" + str(list_day[-3:]))  # 如果1月1日在周一,不需要调休,正常连接周六日放假return list_day[-3:]elif week == 1:  # 周二print("补班日期为:" + str(list_day[-4]))print("放假日期为:" + str(list_day[-3:]))return list_day[-3:]elif week == 2:  # 周三print("补班日期为:" + str(list_day[-4]) + " 和 " + str(int(list_a) + 3))ls = list_day[-2:]ls.append(str(int(list_a) + 1))print("放假日期为:" + str(ls))return lselif week == 3:  # 周四print("补班日期为:" + str(int(list_a) + 3))ls = list_day[-1:]ls.append(str(int(list_a) + 1))ls.append(str(int(list_a) + 2))print("放假日期为:" + str(ls))return lselif week == 4:  # 周五print("不需补班")ls = list_day[-1:]ls.append(str(int(list_a) + 1))ls.append(str(int(list_a) + 2))print("放假日期为:" + str(ls))return lselif week == 5:  # 周六print("不需补班")ls = list_day[-2:]ls.append(str(int(list_a) + 1))print("放假日期为:" + str(ls))return lselse:  # 周日print("不需补班")print("放假日期为:" + str(list_day[-3:]))return list_day[-3:]

5.判断法定节假日为7天假期的放假规则函数(check_holiday_7)(这里有个小坑,就是当输入的春节日期为年底最后6天或者年初前6天的时候后,程序会出错,目前还没见过春节和元旦离得特别近,所以懒得处理,有兴趣的小伙伴可以试一下。)

和放假3天类似,同志们仿照3天的方法编写。
def check_holiday_7(list_a, list_day):"""对于国庆节,春节这些节日进行判断:param list_a::param list_day::return:"""week = datetime.datetime.strptime(list_a, "%Y%m%d").weekday()b = list(range(int(list_day[-1]), int(list_day[-1]) + 7))#list_scq = [x for x in b]list_scq = []............

6.对于元旦生成元旦的放假日期函数(check_holiday_1_1):

def check_holiday_1_1(list_a, jbsd, current_year):"""判断每年元旦放假日期:param list_a::param list_day::param jbsd::param current_year::return:"""week = datetime.datetime.strptime(list_a, "%Y%m%d").weekday()if week == 0:  # 周一以下自行编写.........

7判断加班时段是否在放假日期中函数:

def overdate(jbsd, add_day):"""判断加班时段是否在节假日:param jbsd::param add_day::return:"""list_ = ''#list_代表自定义变量for i in jbsd:if i in add_day:list_ += str(i) + ';'return list_

8.对于扩展项目,对农历传统节日判断,我这里直接用的input,用户自定输入农历对应的阳历日期,然后程序进行判断放假规则。

 current_year = input("请输入春节对应的阳历日期(如:2019):")holiday_ls = []holiday_cj = input("请输入春节对应的阳历日期(如:20190205):")holiday_ls.append(holiday_cj)holiday_qm = input("请输入清明对应的阳历日期(如:20190404):")holiday_ls.append(holiday_qm)holiday_dw = input("请输入端午对应的阳历日期(如:20190505):")holiday_ls.append(holiday_dw)holiday_zq = input("请输入中秋对应的阳历日期(如:20190815):")holiday_ls.append(holiday_zq)holiday_qt = input("请输入特殊活动统一放假日期(如:20190129):")holiday_ls.append(holiday_qt)holiday_ls.extend([current_year + '0101', current_year + '0501', current_year + '1001'])

9.main函数对逻辑进行总体判断:

1. input输入农历对应的阳历日期。
2. 先判断闰年。进行修改天数。
3. 循环当年的总天数,比365,每次循环,调用函数int_t_date。生成对应的日期。
4. 通过最新生成的日期判断是否为加班日期,通过调用函数jbsd_ls。
5. 判断日期是否在法定节假日中,然后根据规则判断是放3天还是7天。存入到add_day列表中.
6. 判断加班,如果是元旦,进行单独处理。
7. 其他月份判断日期是否在加班日期中,如果在,那么需要加班,如果不在,那就判断日期是否为周六日,如果是,不加班。

结果如下:

请输入春节对应的阳历日期(如:2019):2019
请输入春节对应的阳历日期(如:20190205):20190205
请输入清明对应的阳历日期(如:20190404):
请输入端午对应的阳历日期(如:20190505):
请输入中秋对应的阳历日期(如:20190815):20190815
请输入特殊活动统一放假日期(如:20190129):
01月
补班日期为:20181229
放假日期为:['20181230', '20181231', '20190101']
加班日期20181231;20190101;
02月
加班日期:20190202
加班日期:20190203
补班日期为:20190203和20190216
放假日期为:[20190205, 20190206, 20190207, 20190208, 20190209, 20190210, 20190211]
03月
加班日期:20190302
加班日期:20190303
04月
加班日期:20190331
补班日期为:20190428 和 20190504
放假日期为:['20190430', '20190501', '20190502']
05月
加班日期20190430;20190501;20190502;
加班日期20190430;20190501;20190502;
加班日期20190430;20190501;20190502;
06月
加班日期:20190601
加班日期:20190602
07月
加班日期:20190630
08月
加班日期:20190803
补班日期为:20190818
放假日期为:['20190815', '20190816', '20190817']
09月
加班日期:20190831
加班日期:20190901
补班日期为:20190929和20191012
放假日期为:[20191001, 20191002, 20191003, 20191004, 20191005, 20191006, 20191007]
10月
加班日期20191001;20191002;20191003;
加班日期20191001;20191002;20191003;
加班日期20191001;20191002;20191003;
11月
加班日期:20191102
加班日期:20191103
12月
加班日期:20191130
加班日期:20191201

-end-

Python实现节假日及按规定的加班日期相关推荐

  1. JAVA_获取正常上班工作日-除去节假日_双休日_加上加班

    /**实现思路*1. 判断指定日期是否掉是双休日*2. 在通过获取指定日期的 月和日 判断是否是节假*3. 判断是否有节假日 双休加班情况*4. 如果上面的你已经了解,那么得到工作日就简单了,不写了, ...

  2. python 中节假日(工作日)判断

    python 中节假日(工作日)判断 安装包 pip install chinesecalendar 对以下日期进行节假日以及周末判断 2021-04-03 周六 清明节 2020-04-10 周六 ...

  3. Python实现节假日查询

    Python实现节假日查询 随着人们生活水平的提高,我们越来越注重放假,但时间紧迫,错过了黄金的旅游时机就十分遗憾,于是有很多程序员写出了查询节假日的程序,那么我们来学习一下Python如何实现节假日 ...

  4. Python实现节假日判断,手动添加后续节假日

    话不多说,安装 chinese_calendar 库可以实现,是不是节假日的判断,但是这个日期只能到2020年12月31日,2021年的不行,如果作者未发布版本的时候,可自己修改. 修改位置位于  L ...

  5. [LINK]用Python计算昨天、今天和明天的日期时间

    用Python计算昨天.今天和明天的日期时间 转载于:https://www.cnblogs.com/Athrun/p/5477651.html

  6. Python案例:破译爬虫项目实践活动日期密码

    Python案例:破译爬虫项目实践活动日期密码 一.下达编程任务 寒假期间,李铁有幸成为外星人教育Python爬虫项目实践活动的参与者.外星人教育给参加活动的同学都发了一条短信,告知了实践活动日期,但 ...

  7. python 判断节假日_[宜配屋]听图阁

    不废话,直接上代码Python3.6 签到代码,只需修改url,账号,密码即可,此处是登录时无验证登录,有验证码的自行补充 # -*- coding:utf-8 -*- import json imp ...

  8. python 获取节假日,二十四节气,中国农历,星次、每日凶煞、每日值神、农历建除十二神、农历每日宜忌、彭祖百忌、每日五行、二十八星宿、天干地支、农历生辰八字、时辰凶吉等

    Python 农历项目cnlunar的使用 文章目录 Python 农历项目cnlunar的使用 前言 一.cnlunar是什么? 二.使用步骤 1.安装pip 2.使用 总结 前言 1.不使用寿星通 ...

  9. python 日历节假日显示颜色_python判断2018/2019年的某天是否是节假日

    python判断2018/2019年的某天是否是节假日 2019年1月25日 09:15 by wst python小组件 网上找了半天也没找到可用的,没一个省心的. 无奈之下只好自己动手,丰衣足食! ...

最新文章

  1. Linux Performance
  2. [Eclipse]代码已被写入关于如何切换到unix在新行
  3. 微信支付java helloworld_10行代码搞定微信支付(Java版)
  4. ASP.NET Core 3.0预览版体验
  5. 往java里输入坐标值_java.让用户输入x坐标,和y坐标。当用户输入完x坐标(比如200),敲enter,...
  6. linux go missing git command,安装beego出现go: missing Git command
  7. 上传 mp4 格式判断_视频如何转换成通用的MP4格式?按下这个键,10秒就能搞定...
  8. 守住你自己的“沉香”
  9. java quartz 触发_JavaEE进阶知识学习-----定时任务调度Quartz-2-触发器Trigger
  10. 用 ANSYS/LS-DYNA 进行显式动力学仿真计算 (转帖,有修改)
  11. 互换性测量与技术——偏差与公差的计算,公差图的绘制,配合与公差等级的选择方法
  12. mc:Ignorable=“d“什么意思?
  13. MIME sniffing攻击
  14. Springmvc实现分页开发
  15. java面试题之-Redis篇(持续更新)
  16. 能不吃最好别吃:一个食品专业本科生的自白
  17. Linux内核分析2:一个简单的时间片轮转多道程序内核代码分析
  18. 【解决汇总:待更新】CUDA error: an illegal memory access was encountered with channels_last
  19. 腾讯宣布斯凯平台手机QQ版暂停服务 山寨手机或受影响
  20. bat文件判断path路径是否包含其他路径

热门文章

  1. 解决MySQL导入.CSV数据中文乱码
  2. 计算机组成认知的笔记1000字,[转载]笔记整理——认知负荷理论
  3. 双向可控硅实现单相交流电机正反转(硬开通加缓冲吸收,无过零)
  4. 回顾 Firefox 历史
  5. 关于SQL的一点学习
  6. Docker 磁盘空间使用分析与清理 解决磁盘空间不足
  7. python pandas 条件选择
  8. windows系统通过CMD将文件copy到远程电脑
  9. 初学者古琴入门知识——【唐畅古琴】
  10. Linux系统软件工程师/嵌入式Linux应用开发工程师 知识体系构建 500篇(持续更新)