如何在Python2.7中生成30分钟间隔的时间槽
实现30分钟间隔的可用时间槽生成
我明白你的需求啦——把原来的1小时间隔时间槽改成30分钟,还要自动排除已预约的时段对吧?咱们来一步步调整代码:
首先,原代码里用time对象生成小时级序列不太方便做30分钟的增量,咱们换成datetime对象来处理时间会更灵活。然后生成从上班时间到下班时间,每隔30分钟的所有时间点,最后过滤掉已预约的那些,就能得到可用时段了。
修改后的完整代码
from datetime import datetime, timedelta def get_time_slotes(): # 工作时间范围 work_start_str, work_end_str = u'08:00', u'17:00' # 已预约的时间 appointments = [u'12:30', u'13:00', u'09:00', u'9:30'] # 把时间字符串转换成datetime对象(方便做增量计算) work_start = datetime.strptime(work_start_str, '%H:%M') work_end = datetime.strptime(work_end_str, '%H:%M') # 把已预约时间转换成datetime对象,并存入集合(方便快速查找) appointments_set = set(datetime.strptime(apt, '%H:%M') for apt in appointments) # 生成30分钟间隔的时间序列 time_slots = [] current_time = work_start while current_time < work_end: # 如果当前时间不在预约集合里,就加入可用列表 if current_time not in appointments_set: time_slots.append(current_time.strftime('%H:%M')) # 每次增加30分钟 current_time += timedelta(minutes=30) print("可用时间槽列表: " + str(time_slots)) if __name__ == "__main__": get_time_slotes()
关键改动说明
- 改用
datetime对象处理时间:time对象无法直接和timedelta做加法,换成datetime后可以轻松实现30分钟的步进操作。 - 用集合存储已预约时间:集合的查找效率是O(1),比列表遍历更快,判断当前时间是否被预约会更高效。
- 循环生成时间槽:从上班时间开始,每次累加30分钟,直到接近下班时间,同时自动过滤掉已预约的时段。
测试输出结果
运行代码后,你会得到符合预期的可用时间槽:可用时间槽列表: ['08:00', '08:30', '10:00', '10:30', '11:00', '11:30', '12:00', '13:30', '14:00', '14:30', '15:00', '15:30', '16:00', '16:30']
内容的提问来源于stack exchange,提问作者ClarkeFL
相关产品推荐
相关产品推荐

