You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:08:40