我想使用纪元时间格式从给定的小时范围获得随机时间。 例如,我有这个:
start_time = int(time.time())
end_time = start_time + 5184000 # 60 days
random_time = random.randint(start_time, end_time)
我想从上午9点到晚上9点随机抽出时间。在Python中实现这一目标的最简单,最好的方法是什么?
答案 0 :(得分:1)
如果我理解OP是正确的,那么接下来的60天将会有3次随机时间,每个随机时间是上午9点到晚上9点。
import datetime
import random
d = datetime.datetime.today()
d = d.replace(hour=0, minute=0, second=0, microsecond=0)
for days in range(60):
for c in range(3): # OP wanted 3 times per date
hours = random.randint(9, 20)
minutes = random.randint(0, 59)
seconds = random.randint(0, 60)
new_d = d + datetime.timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds)
print(new_d)
我使用内置包datetime
并且不使用纪元时间的原因是因为纪元时间因闰日,分钟和秒而无法提供有关当天实际时间的任何信息。但是这个包是内置的,所以这应该不是问题。
答案 1 :(得分:1)
结构时间是只读的,所以不能被黑客攻击。如果随机时间不合适,只需随机调整小时。
import time,random
start_time = int(time.time())
end_time = start_time + 5184000 # 60 days
random_time = random.randint(start_time, end_time)
ts = time.localtime(random_time)
if 9 <= ts.tm_hour < 21:
pass
else:
hour = random.randrange(9,21)
rts=[ts.tm_year,ts.tm_mon,ts.tm_mday,hour,ts.tm_min,ts.tm_sec,ts.tm_wday,ts.tm_yday,ts.tm_isdst]
random_time = time.mktime(rts)
print(random_time,time.strftime("%Y-%m-%d %H-%M-%S",rts))
答案 2 :(得分:1)
问:你的意思是你想从上午9点到晚上9点随机分钟获得60天的清单(范围是从上下文给出的)? 答强> 让我们说,是的。实际上,我每天需要3次随机时间。
#!/usr/bin/env python
import random
import time
HOUR = 3600
DAY = 24 * HOUR
def random_times(ndays=60, n_per_day=3):
midnight = (int(time.time()) // DAY) * DAY
start = midnight + 9 * HOUR # 9am in UTC
end = start + ndays * DAY
while start < end:
yield sorted(random.sample(range(start, start + 12 * HOUR), n_per_day))
start += DAY
以“纪元时间格式”生成时间。它可能产生一个早于当前时间的随机时间。如果不合适,您可以使用不同的公式计算第一天的随机时间:
available_times = range(max(int(time.time()), start), start + 12 * HOUR)
yield sorted(random.sample(available_times, min(n_per_day, len(available_times)))
即使第一天的可用时间较少,它也会尝试生成n_per_day
个随机时间。
如果您需要在当地时区上午9点至晚上9点之间的时间,则start
的计算时间应不同:
start = time.mktime(time.localtime()[:3] + (9, 0, 0) + (-1,)*3)
假设在当地时区的接下来的60天内,上午9点到晚上9点之间没有DST过渡(合理假设)或缺少天数(很少发生),其余部分完全相同。