使用纪元时间格式在给定小时之间的随机时间

时间:2016-06-18 13:24:33

标签: python time epoch

我想使用纪元时间格式从给定的小时范围获得随机时间。 例如,我有这个:

start_time = int(time.time())
end_time = start_time + 5184000    # 60 days
random_time = random.randint(start_time, end_time)

我想从上午9点到晚上9点随机抽出时间。在Python中实现这一目标的最简单,最好的方法是什么?

3 个答案:

答案 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过渡(合理假设)或缺少天数(很少发生),其余部分完全相同。