1. import datetime
  2. # 计算两个日期之间的工作日数,非天数.
  3. class workDays():
  4. def __init__(self, start_date, end_date, days_off=None):
  5. """days_off:休息日,默认周六日, 以0(星期一)开始,到6(星期天)结束, 传入tupple
  6. 没有包含法定节假日,
  7. """
  8. self.start_date = start_date
  9. self.end_date = end_date
  10. self.days_off = days_off
  11. if self.start_date > self.end_date:
  12. self.start_date,self.end_date = self.end_date, self.start_date
  13. if days_off is None:
  14. self.days_off = 5,6
  15. # 每周工作日列表
  16. self.days_work = [x for x in range(7) if x not in self.days_off]
  17.  
  18. def workDays(self):
  19. """实现工作日的 iter, 从start_date 到 end_date , 如果在工作日内,yield 日期
  20. """
  21. # 还没排除法定节假日
  22. tag_date = self.start_date
  23. while True:
  24. if tag_date > self.end_date:
  25. break
  26. if tag_date.weekday() in self.days_work:
  27. yield tag_date
  28. tag_date += datetime.timedelta(days=1)
  29.  
  30. def daysCount(self):
  31. """工作日统计,返回数字"""
  32. return len(list(self.workDays()))
  33.  
  34. def weeksCount(self, day_start=0):
  35. """统计所有跨越的周数,返回数字
  36. 默认周从星期一开始计算
  37. """
  38. day_nextweek = self.start_date
  39. while True:
  40. if day_nextweek.weekday() == day_start:
  41. break
  42. day_nextweek += datetime.timedelta(days=1)
  43. # 区间在一周内
  44. if day_nextweek > self.end_date:
  45. return 1
  46. weeks = ((self.end_date - day_nextweek).days + 1)/7
  47. weeks = int(weeks)
  48. if ((self.end_date - day_nextweek).days + 1)%7:
  49. weeks += 1
  50. if self.start_date < day_nextweek:
  51. weeks += 1
  52. return weeks

获取结果:

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

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

  1. MySql获取两个日期间的时间差

    [1]MySql 语言获取两个日期间的时间差 DATEDIFF 函数可以获得两个日期之间的时间差.但是,这个函数得出的结果是天数. 需要直接获取秒数可使用TIMESTAMPDIFF函数.应用示例如下: ...

  2. JS获取两个日期间的所有日期

    var stime = '2018-07-25'; //开始日期 var etime = '2018-08-02'; //结束日期 getdiffdate(stime,etime); //获取两日期之 ...

  3. python 计算两个日期间的小时数

    #!/usr/bin/env python #encoding: utf-8 import datetime def dateDiffInHours(t1, t2): td = t2 - t1 ret ...

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

    declare @start datetime declare @end datetime set @start = '2018-01-25' set @end = '2018-02-03' sele ...

  5. Oracle计算两天两个日期间相差的天数

    Oracle计算两天两个日期间相差的天数: select to_date('19930411','yyyymmdd')-to_date('19890507','yyyymmdd') from dual ...

  6. Java 两个日期间的天数计算

    在Java中计算两个日期间的天数,大致有2种方法:一是使用原生JDK进行计算,在JDK8中提供了更为直接和完善的方法:二是使用第三方库. 1.使用原生的JDK private static long  ...

  7. [Xcode 实际操作]九、实用进阶-(4)计算两个日期间的差值

    目录:[Swift]Xcode实际操作 本文将演示如何计算两个日期之间的差值. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class ...

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

    <script type="text/javascript"> /* * 获得时间差,时间格式为 年-月-日 小时:分钟:秒 或者 年/月/日 小时:分钟:秒 * 其中 ...

  9. [java]察看两个日期间差多少秒/小时/天

    Java 中Date类getTime()的方法返回从1970-1-1以来的毫秒数,这是下面函数运行的基础. package com.example.demo; import java.text.Par ...

随机推荐

  1. JAVA自学笔记15

    JAVA自学笔记15 @例题1:共有5个学生,请把五个学生的信息存储到数组中,并遍历数组,并获取每个学生的信息 Students[] students=new Student[5]; Student ...

  2. 完善mui的tap及longtap点击效果

    以下为原版效果: 以下为我们改版的效果: 希望你们能看出差别,很细小,但更适合我们的需要.就是选中背景色的问题,官方的是点一下背景色就没有了,我们的是选中一直存在.

  3. ios之animateWithDuration的坑

    [UIView animateWithDuration:<#(NSTimeInterval)#> delay:<#(NSTimeInterval)#> options:< ...

  4. Error-MVC: “/”应用程序中的服务器错误。

    ylbtech-Error-MVC: “/”应用程序中的服务器错误. 1.返回顶部 1. “/”应用程序中的服务器错误. 运行时错误 说明: 服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁 ...

  5. Mockito-简单使用使用

    参考案例:(本位使用markdown编写) git.oschina实例:https://gitee.com/lhhTestTool/LhhMockito # LhhMockitomock 单元测试 M ...

  6. 一句话Javascript实现价格格式化

    //小数点后面如果超过3位则转换错误,如1.1234 正确的是1.1234但却错误的转换成了1.1,234 var test1 = '1234567890.123' var format = test ...

  7. Android Studio3.1.2升级问题:Configuration 'compile' is obsolete and has been replaced with 'implementation'.

    每次升级Android Studio时,一般情况下Gradle版本的也会相应的升级,我之前Android Studio 3.0.1.Gradle 是4.1升级后为:Android Studio 3.1 ...

  8. vim配置go语法高亮

    操作系统 : CentOS7.3.1611_x64 go 版本 : go1.8.3 linux/amd64 vim版本 :version 7.4.160 vim配置go语言语法高亮的问题已经遇到过好几 ...

  9. FreeBie—免费设计师专用素材网

    FreeBie—免费设计师专用素材网 网站地址: https://freebiesupply.com/ 网站分类: 素材 浏览次数: 192 标签: 设计素材 Freebie Supply 是国外一家 ...

  10. 全面理解Java内存模型(JMM)及volatile关键字(转载)

    关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoad ...