我正在尝试生成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
答案 0 :(得分:1)
datetime
库的全部内容:datetime
,timedelta
等对象尽可能多地使用数字,因此您可以对它们进行算术运算。
因此,要在一天内生成均匀分布,只需从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个示例日期:)
祝你好运