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

如何在指定工作日时段生成两个间隔≥1小时的随机时间?

随机工作日时间生成需求及解决方案

需求说明

  • 时间范围:2023年4月1日至7月31日的工作日(周一至周五)
  • 每个工作日生成两个随机时间(hh:mm:ss),需满足:
    1. 两个时间间隔至少1小时
    2. 时间均在8:00-18:00之间

现有初步代码

import random
from datetime import datetime, timedelta

start = datetime(2023, 4, 1, 00, 00, 00)
end = start + timedelta(days=160)

for i in range(10):
    random_date = start + (end - start) * random.random()
    no = random_date.weekday()
    if no < 5:
      print(random_date)

改进后的完整代码

import random
from datetime import datetime, timedelta

# 定义目标日期范围的起止点
start_date = datetime(2023, 4, 1)
end_date = datetime(2023, 7, 31)

# 收集范围内所有工作日
workdays = []
current_date = start_date
while current_date <= end_date:
    if current_date.weekday() < 5:  # 0=周一,4=周五,筛选工作日
        workdays.append(current_date)
    current_date += timedelta(days=1)

# 为每个工作日生成符合要求的两个时间
for day in workdays:
    # 限定当天的有效时间区间:8:00到18:00
    day_time_start = datetime(day.year, day.month, day.day, 8, 0, 0)
    day_time_end = datetime(day.year, day.month, day.day, 18, 0, 0)
    total_available_seconds = (day_time_end - day_time_start).total_seconds()
    
    # 生成第一个随机时间
    sec1 = random.randint(0, int(total_available_seconds))
    time1 = day_time_start + timedelta(seconds=sec1)
    
    # 生成第二个时间,确保间隔≥1小时
    if (day_time_end - time1).total_seconds() >= 3600:
        # 第一个时间早于17:00,第二个时间可选范围是time1+1h到18:00
        sec_min = sec1 + 3600
        sec_max = total_available_seconds
    else:
        # 第一个时间晚于17:00,第二个时间可选范围是8:00到time1-1h
        sec_min = 0
        sec_max = sec1 - 3600
    
    sec2 = random.randint(int(sec_min), int(sec_max))
    time2 = day_time_start + timedelta(seconds=sec2)
    
    # 随机打乱两个时间的顺序,避免固定先后
    if random.random() > 0.5:
        time1, time2 = time2, time1
    
    print(f"日期: {day.date()}")
    print(f"时间1: {time1.time()}, 时间2: {time2.time()}")
    print("---")

关键改进说明

  • 精准收集工作日:不再随机筛选日期,而是遍历整个目标区间,确保每个工作日都被处理,避免遗漏或重复。
  • 严格时间区间约束:将当天的随机时间限定在8:00-18:00内,通过计算该区间的总秒数来生成随机时间,逻辑更清晰。
  • 间隔约束实现:根据第一个时间的位置,动态确定第二个时间的可选范围,确保两者间隔至少1小时,同时随机打乱顺序,避免结果模式化。
  • 日期范围精准性:直接指定结束日期为2023年7月31日,替代原代码的timedelta(days=160),避免超出目标月份。

内容的提问来源于stack exchange,提问作者mrparga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:46:13