【问题标题】:Python Date Gaps In PercentagePython 日期差距百分比
【发布时间】:2019-03-31 11:21:17
【问题描述】:

假设我有这些分配日期为所有员工工作:

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 复杂,

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

定义日期范围(日期1,日期2):

 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 天

【问题讨论】:

    标签: python python-2.7 date datetime


    【解决方案1】:

    这将是你所期望的

    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)
    

    【讨论】:

    • 对不起!实际上,您看到员工 A:1 月 1 日至 4 日和员工 D:1 月 2 日至 6 日,所以它重叠,所以完全独立的工作日期:1 月 1 日至 6 日,我认为我们在这里考虑的是不同的个人日期,不是吗?跨度>
    • 但它没有考虑重叠:/
    • 您想从最终结果中减去重叠部分吗?
    • 是的,您在示例中看到,我已经看到员工 A + D 的重叠天数 = 6 天,而不是 9 天。
    • 实际上,我们只需要考虑在 1 月 1 日至 1 月 31 日之间没有分配的日期。这就是我们的目标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 2015-08-12
    • 2016-09-05
    相关资源
    最近更新 更多