在python中生成时间戳的随机列表 [英] Generate random list of timestamps in python

查看:110
本文介绍了在python中生成时间戳的随机列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to generate random list of 24hr timestamps. I can generate one sample of date and time between the set range using the code below. I'm hoping to generate multiple samples (e.g. 10 samples)

此外,日期组件对我来说不是优先事项.如果我可以放弃它并生成随机的 24 小时时间戳,那就太好了.

Also, the date component isn't a priority for me. If i could drop that and just generate random 24hr timestamps that would be good.

我发现的大多数线程只考虑生成随机日期.我可以找到任何与时间有关的东西.

Most threads I've found only consider generate random dates. I can find anything that concerns time.

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

推荐答案

datetime 库的要点:datetimetimedelta、等对象的行为尽可能像数字,因此您可以对它们进行算术运算.

The whole point of the datetime library: datetime, timedelta, etc. objects act as much like numbers as possible, so you can just do arithmetic on them.

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

So, to generate a uniform distribution over a day, just take a uniform distribution from 0.0 to 1.0, and multiply it by a day:1

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

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

To generate a uniform random time on some particular day, just add that to midnight on that day:

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

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

To generate a random timestamp between two timestamps:

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

如果你想要其中的 10 个:

And if you want 10 of those:

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

仅此而已.远离 time 模块中的所有其他时间格式;仅当您需要与 C 库和文件系统数据等内容兼容时才需要它们.首先使用 datetime :

That's all there is to it. Stay away from all those other time formats from the time module; they're only needed if you need compatibility with stuff like C libraries and filesystem data. Just use datetime in the first place:

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. However, keep in mind that if you're dealing with local rather than UTC times, some days are actually 23 or 25 hours long, because of Daylight Saving Time. A timedelta doesn't understand that.

这篇关于在python中生成时间戳的随机列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆