处理员工计划(Python 2.7),我在isoWeek中为给定的人员列出了工作日(和时间)。
在给定日期的情况下,我正在尝试确定工作人员的下一个日期何时可用。
working_days = {
1:
{
'start': datetime.time(8, 0),
'end': datetime.time(17, 15)
},
2:
{
'start': datetime.time(7, 45),
'end': datetime.time(17, 0)
},
3:
{
'start': datetime.time(8, 0),
'end': datetime.time(16, 45)
},
4:
{
'start': datetime.time(10, 0),
'end': datetime.time(15, 30)
},
5:
{
'start': datetime.time(8, 30),
'end': datetime.time(17, 15)
}
}
searched_date = datetime.datetime(2018, 6, 13, 20, 57, 00) // Wednesday
searched_date_week_day = searched_date.isoweekday()
预期结果:datetime.datetime(2018,6,14,10,00,00)//星期四10点
我本来希望只使用工作日来实现这个结果,但我对此表示怀疑。
我写的内容是最简单的例子(我的搜索时间大于工作人员的最终工作时间)
next_working_day = next((x for x in working_days if x >= searched_date_week_day), None)
给出:3,星期三
考虑到我会有更棘手的案例(让我们想象我的搜索日期是在星期天,isoweek 7,它不起作用),我唯一的出路是在某些datetime.datetime
列表中转换我的work_days吗?
答案 0 :(得分:1)
以你的小提琴为起点:
import datetime
working_days = [{'start': datetime.time(8, 0), 'end': datetime.time(17, 0), 'day': 1}, {'start': datetime.time(8, 0), 'end': datetime.time(17, 0), 'day': 2}, {'start': datetime.time(8, 0), 'end': datetime.time(17, 0), 'day': 3}, {'start': datetime.time(8, 0), 'end': datetime.time(17, 0), 'day': 4}]
searched_date = datetime.datetime(2018, 6, 13, 20, 57, 00)
searched_date_week_day = searched_date.isoweekday()
i = 0
while i < len(working_days) and working_days[i]['day'] < searched_date_week_day:
i = i + 1
# if reached the end then next working day must be first day of next week
if i == len(working_days):
next_working_day = working_days[0]
else:
next_working_day = working_days[(i+1) % len(working_days)]
print next_working_day
它假定列表中的条目按天顺序排列。