randrange python步骤参数,以分钟为单位

时间:2018-04-03 10:58:32

标签: python datetime random

在python中,我想使用randrange函数和使用step参数在两个间隔之间生成一个随机时间。我希望使用randrange以5分钟的间隔生成时间。可能吗?或者python中是否还有其他功能可以实现相同的功能?

import datetime
import time
import random

start = datetime.datetime(2017,4,25,8,0)
end = datetime.datetime(2017,4,25,11,30)
steptime = datetime.datetime(2017,4,25,0,5)
totalnum=10
start_ts = int(time.mktime(start.timetuple()))
end_ts = int(time.mktime(end.timetuple()))
step = int(time.mktime(steptime.timetuple()))
for val in range(totalnum):
    random_ts = random.randrange(start_ts, 
 end_ts,step)
RANDOMTIME = datetime.datetime.fromtimestamp(random_ts)
print(RANDOMTIME.strftime("%Y-%m-%d %H:%M"))

如上所述,我无法找到在5分钟间隔内产生时间的方法。

TIA

3 个答案:

答案 0 :(得分:0)

您可以从开始日期和结束日期之间生成随机日期时间。见Generate a random date between two other dates

然后将随机日期四舍五入到最近的5分钟。见How to round the minute of a datetime object python

答案 1 :(得分:0)

我认为你让这有点太复杂了 - 只需将较早的日期与之后的日期联系起来,在其范围内获得一个随机的第二个(或毫秒,如果你想要非常颗粒化)并将其添加为{{3到较低的日期时间,例如:

import datetime
import random

def datetime_in_range(low, high, interval):  # interval in seconds
    delta = (high - low).total_seconds()
    return low + datetime.timedelta(seconds=random.randrange(0, int(delta), interval))

# test
start = datetime.datetime(2017, 4, 25, 8, 0)
end = datetime.datetime(2017, 4, 25, 11, 30)

print(datetime_in_range(start, end, 300))  # 2017-04-25 09:25:00
print(datetime_in_range(start, end, 300))  # 2017-04-25 08:30:00
print(datetime_in_range(start, end, 300))  # 2017-04-25 11:10:00

如果您想要毫秒精度,只需将delta1000相乘,并使用datetime.timedelta构造中的milliseconds

答案 2 :(得分:0)

感谢您的回答。我通过提供步骤300秒来解决它

random_ts = random.randrange(start_ts, end_ts,300)