Весь смысл библиотеки 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 часов из-за перехода на летнее время. A timedelta
этого не понимает.