在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
答案 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
如果您想要毫秒精度,只需将delta
与1000
相乘,并使用datetime.timedelta
构造中的milliseconds
。
答案 2 :(得分:0)
感谢您的回答。我通过提供步骤300秒来解决它
random_ts = random.randrange(start_ts, end_ts,300)