【问题标题】:List of datetimes with the context of working hours, calculate non working hours包含工作时间上下文的日期时间列表,计算非工作时间
【发布时间】:2019-08-27 17:24:33
【问题描述】:

所以我有一组工作时间(班次),即日期时间格式的起点和终点元组。这样一个人就可以在同一天进行多个轮班:

from datetime import datetime
shift1_1 = datetime(year=2019, month=8, day=21, hour=8)
shift1_2 = datetime(year=2019, month=8, day=21, hour=11)
shift2_1 = datetime(year=2019, month=8, day=21, hour=12)
shift2_2 = datetime(year=2019, month=8, day=21, hour=17)
shift3_1 = datetime(year=2019, month=8, day=22, hour=8)
shift3_2 = datetime(year=2019, month=8, day=22, hour=10)
shift4_1 = datetime(year=2019, month=8, day=22, hour=12)
shift4_2 = datetime(year=2019, month=8, day=22, hour=15)
shift5_1 = datetime(year=2019, month=8, day=22, hour=17)
shift5_2 = datetime(year=2019, month=8, day=22, hour=19)
shifts = [(shift1_1,shift1_2), (shift2_1,shift2_2), (shift3_1,shift3_2), (shift4_1,shift4_2),(shift5_1,shift5_2)]

我想计算补数,所以非工作时间的起点和终点。

如何解决这个问题?至于现在,我还没有找到实用的计算方法。有人知道这个问题的算法吗?

如果有任何正确方向的提示,我将不胜感激。

【问题讨论】:

  • 从上述示例数据中您想要的结果是什么样的?
  • #daystart_shift1 到 3 和 dayend_shif1 到 3 是等效日期的结束和开始 off_times = [ (daystart_shift1, shift1_1), (shift1_2, dayend_shift2), (daystart_shift2, shift2_1), (shift2_2, dayend_shift2), (daystart_shift3, shift3_1), (shift3_2, shift4_1), (shift4_2, shift5_1), (shift5_2, daysend_shift3)]

标签: python algorithm python-2.7 optimization python-datetime


【解决方案1】:

这个怎么样:

off_times = []
for i in range(shifts - 1):
   off_times.append((shifts[i][1], shifts[i + 1][0]))

【讨论】:

  • 我会试试这个,看起来很有希望
【解决方案2】:

tituszban的帖子的帮助下想通了

我生成了我的轮班列表中的天数列表。然后我循环我所有的班次并将它们分成一个单一的日期时间列表。 之后的每一天:

  • 创建一个空列表
  • 为指定日期的开始和结束分别创建一个日期时间对象
  • 添加一天的开始
  • 过滤我的单个日期时间列表以匹配给定日期并循环遍历此过滤器,将日期时间添加到我的列表中
  • 使用pairwise iteration 我可以创建新元组并将它们添加到off_times 列表中

最后我得到一个包含我的 off_times 的新元组数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    相关资源
    最近更新 更多