如何计算空闲时间的时差?

时间:2019-12-20 17:53:59

标签: python datetime timedelta

我想计算两个datetime对象之间的经过时间,但是在某种程度上,我考虑了预编程的空闲时间,例如:

    WHEN        IDLE TIME
0   Weekdays    12:00 to 13:00
1   Mon-Thu     18:00 to 8:00 following day
2   Fri         17:00 to 8:00 following Monday/working day
3   Holidays    18:00 previous day to 8:00 next working day

使用一个示例,让我们来做

In [1]: beginning = datetime(2019, 12, 11, 19, 21)

In [2]: end = datetime(2019, 12, 22, 14, 34)

In [3]: elapsed = end - beginning

In [4]: '{} days, {} hours, {} min, {} sec'.format(elapsed.days,
   ...: elapsed.seconds // 3600,
   ...: (elapsed.seconds // 60) % 60,
   ...: elapsed.seconds % 60)
Out[4]: '10 days, 19 hours, 13 min, 0 sec'

但是,我需要找到一种不考虑以下因素的计算方法:

  • 2019年12月12日beginning至8:00之间的所有时间(因为开始时间是18:00之后);
  • 12月12-13日,16-17、17-18、18-19和19-20的18:00至8:00之间的14小时;
  • 12月13日18:00至12月16日8:00之间的62小时;
  • 2019年12月20日17:00之后45小时34分钟(因为end是星期五的17:00之后)
  • 12月12日,13日,16日,17日,18日,19日和20日每个小时;

所以我的timedelta对象将返回(如果我的计算正确):

Out[5]: '4 days, 22 hours, 0 min, 0 sec'

我能做到的一种方法是迭代beginning的timedelta,并相应地进行每个子句检查和计算。但是我期待在600,000行的DataFrame上使用这样的算法,因此我需要使其效率更高。 Python中有没有一种方法可以有效地对这些“时间跳跃”进行编程?

0 个答案:

没有答案