Python日期间隔百分比

时间:2019-03-31 11:21:18

标签: python python-2.7 date datetime

假设我有以下分配日期可用于所有员工:

  

2019年1月1日至2019年1月31日

假设下面的员工已经分配了工作日期,可能是某个时间,有两个或多个员工在同一平板中一起工作,例如员工A和员工D,

  

员工A:2019年1月1日至2019年1月4日

     

员工B:2019年1月22日至2019年1月25日

     

员工C:2019年1月10日至2019年1月20日

     

员工D:2019年1月2日至2019年1月6日

我试图从范围中逐一找出日期,然后与平板进行比较,但是这将花费更多的时间n复杂,

  

从日期时间导入时间增量开始,日期

     

def daterange(date1,date2):

 for n in range(int ((date2 - date1).days)+1):

     yield date1 + timedelta(n)

所以预期结果将是:

  

总分配:1月1日至1月31日== 31天

     

在两个日期之间分配的员工:

  • 员工A /员工D:1月1日至1月6日= 6天
  • C员工:1月10日至1月20日= 11天
  • 员工B:1月22日至1月25日= 4天
  

因此,最终差距预期为结果= 31天-(6 + 11 + 4)= 10天

1 个答案:

答案 0 :(得分:0)

这就是您所期望的

from datetime import datetime, timedelta

work_days = (datetime(day=31, month=1, year=2019) - datetime(day=1, month=1, year=2019)).days
empl_a = (datetime(day=1, month=1, year=2019), datetime(day=4, month=1, year=2019))
empl_b = (datetime(day=22, month=1, year=2019), datetime(day=25, month=1, year=2019))
empl_c = (datetime(day=10, month=1, year=2019), datetime(day=20, month=1, year=2019))
empl_d = (datetime(day=2, month=1, year=2019), datetime(day=6, month=1, year=2019))

total = sum((date2 - date1).days for date1, date2 in (empl_a, empl_b, empl_c, empl_d))
print(work_days - total)