在python中生成随机时间戳列表

时间:2018-05-04 00:29:07

标签: python random time timedelta

我正在尝试生成24小时时间戳的随机列表。我可以使用下面的代码在设定范围之间生成一个日期和时间样本。我希望生成多个样本(例如10个样本)

此外,日期组件不是我的优先事项。如果我可以放弃它,只是生成随机的24小时时间戳,这将是好的。

我发现的大多数主题只考虑生成随机日期。我可以找到任何与时间有关的事情。

import random
import time
from datetime import datetime

def randomDate(start, end):
    frmt = '%d-%m-%Y %H:%M:%S'

    stime = time.mktime(time.strptime(start, frmt))
    etime = time.mktime(time.strptime(end, frmt))

    ptime = stime + random.random() * (etime - stime)
    dt = datetime.fromtimestamp(time.mktime(time.localtime(ptime)))
    return dt

random_datetime = randomDate("20-01-2018 13:30:00", "23-01-2018 04:50:34")

print(random_datetime)

输出:

2018-01-21 03:33:55

4 个答案:

答案 0 :(得分:1)

datetime库的全部内容:datetimetimedelta等对象尽可能多地使用数字,因此您可以对它们进行算术运算。

因此,要在一天内生成均匀分布,只需从0.0到1.0进行均匀分布,然后将其乘以一天: 1

td = random.random() * datetime.timedelta(days=1)

要在某一天生成统一的随机时间,只需将其添加到当天的午夜:

dt = datetime.datetime(2018, 5, 1) + random.random() * datetime.timedelta(days=1)

在两个时间戳之间生成随机时间戳:

dt = random.random() * (end - start) + start

如果你想要其中的10个:

[random.random() * (end - start) + start for _ in range(10)]

这就是它的全部。远离time模块中的所有其他时间格式;只有在需要兼容C库和文件系统数据等内容时才需要它们。首先使用datetime

def randomtimes(stime, etime, n):
    frmt = '%d-%m-%Y %H:%M:%S'
    stime = datetime.datetime.strptime(start, frmt)
    etime = datetime.datetime.strptime(end, frmt)
    td = etime - stime
    return [random.random() * td + stime for _ in range(n)]

<子> 1。但是,请记住,如果您处理本地而不是UTC时间,由于夏令时,某些天实际上是23或25小时。 timedelta无法理解。

答案 1 :(得分:1)

如果您需要连续的时间:

from datetime import datetime,timedelta

time_starter = datetime.strptime("12:00:00","%H:%M:%S")

for i in range(1,10):
    time = time_starter + timedelta(hours=i)
    time = time.strftime("%H:%M:%S")

    print(time)

如果需要随机或连续分钟,请使用:

time = time_starter + timedelta(minutes=i) #continuous 
time = time_starter + timedelta(minutes=randint(0,60)) #random

答案 2 :(得分:0)

根据您的需要,学习Python日期时间模块可能非常值得。如果你的代码会做很多不同的操作,那么请选择abernert的答案。如果您只需要一个时间字符串(而不是Python时间戳),这个函数将为您提供:

import random

def randomTime():
    # generate random number scaled to number of seconds in a day
    # (24*60*60) = 86,400

    rtime = int(random.random()*86400)

    hours   = int(rtime/3600)
    minutes = int((rtime - hours*3600)/60)
    seconds = rtime - hours*3600 - minutes*60

    time_string = '%02d:%02d:%02d' % (hours, minutes, seconds)
    return time_string

for i in range(10):
    print(randomTime())

此输出:

19:07:31
16:32:00
02:01:30
20:31:21
20:20:26
09:49:12
19:38:42
10:49:32
13:13:36
15:02:54

但是如果你不想要24小时的时间,那么你可以截取“小时”。在将它填入字符串之前变量:

import random

def randomTime():
    # generate random number scaled to number of seconds in a day
    # (24*60*60) = 86,400

    rtime = int(random.random()*86400)

    hours   = int(rtime/3600)
    minutes = int((rtime - hours*3600)/60)
    seconds = rtime - hours*3600 - minutes*60

    # figure out AM or PM
    if hours >= 12:
        suffix = 'PM'
        if hours > 12:
            hours = hours - 12
    else:
        suffix = 'AM'

    time_string = '%02d:%02d:%02d' % (hours, minutes, seconds)
    time_string += ' ' + suffix
    return time_string

for i in range(10):
    print(randomTime())

给出:

05:11:45 PM
02:28:44 PM
08:09:19 PM
02:52:30 PM
07:40:02 PM
03:55:16 PM
03:48:44 AM
12:35:43 PM
01:32:51 PM
07:54:26 PM

答案 3 :(得分:0)

import random
import time
from datetime import datetime
dates = []
def randomDate(start, end):
    frmt = '%d-%m-%Y %H:%M:%S'

    stime = time.mktime(time.strptime(start, frmt))
    etime = time.mktime(time.strptime(end, frmt))

    ptime = stime + random.random() * (etime - stime)
    dt = datetime.fromtimestamp(time.mktime(time.localtime(ptime)))
    return dt

for i in range(0 , 10)
    dates.append(randomDate("20-01-2018 13:30:00", "23-01-2018 04:50:34"))

您的日期将列出10个示例日期:)
祝你好运