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

3 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)
Run Code Online (Sandbox Code Playgroud)

输出:

2018-01-21 03:33:55
Run Code Online (Sandbox Code Playgroud)

aba*_*ert 8

datetime库的全部意义:datetime,timedelta等对象的行为尽可能像数字,因此您可以对它们进行算术运算。

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

td = random.random() * datetime.timedelta(days=1)
Run Code Online (Sandbox Code Playgroud)

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

dt = datetime.datetime(2018, 5, 1) + random.random() * datetime.timedelta(days=1)
Run Code Online (Sandbox Code Playgroud)

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

dt = random.random() * (end - start) + start
Run Code Online (Sandbox Code Playgroud)

如果你想要其中的 10 个:

[random.random() * (end - start) + start for _ in range(10)]
Run Code Online (Sandbox Code Playgroud)

这里的所有都是它的。远离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)]
Run Code Online (Sandbox Code Playgroud)

1. 但是,请记住,如果您处理的是本地时间而不是 UTC 时间,由于夏令时,有些日子实际上是 23 或 25 小时。阿timedelta不明白。

  • 我得到 `td = random.random() * datetime.timedelta(days=1) TypeError: unsupported operand type(s) for *: 'float' and 'datetime.timedelta'` (2认同)