Как мне сгенерировать случайную временную метку в следующие 5 дней в Python? - PullRequest
0 голосов
/ 10 мая 2018

Я хотел бы получить случайное время между 8 утра и 3 вечера в любой из следующих 5 дней в Python.Я пытался поиграть с timedelta на date.now(), но мои результаты никогда не бывают особенно случайными (я постоянно получаю одну и ту же дату, что наводит меня на мысль, что timedelta не очень хорошо играет со случайными)

Ответы [ 5 ]

0 голосов
/ 10 мая 2018

Предполагая, что следующие пять дней начнутся с завтрашнего дня, вы можете случайным образом выбрать число от 1 до 5 и добавить его к текущей дате.Затем объедините его с объектом time, чтобы создать datetime, к которому вы можете добавить случайно выбранный номер от 1 до 25200 (количество секунд между 8:00 и 15:00).

from datetime import date, time, datetime, timedelta
from random import randint

d = date.today() + timedelta(days=randint(1, 5))
t = time(8, 0, 0)
dt = datetime.combine(d, t) + timedelta(seconds=randint(1, 25200))

print(dt)

Еслиследующие пять дней, начиная с сегодняшнего дня, настройте первый randint на randint(0, 4), и, если ваша временная метка должна включать микросекунды, увеличьте вторую randint.

0 голосов
/ 10 мая 2018

Один из подходов заключается в создании начальной отметки времени в 8 часов утра завтрашнего утра. Затем сгенерируйте случайное количество секунд, чтобы добавить к этому смещению, которое упадет где-то между 8:00 и 15:00 (7-часовое окно) - это устанавливает время дня, назовите его time_offset. Затем выберите случайное число от 0 до 4 (включительно), чтобы выбрать случайный день - назовите его day_offset. Наконец, добавьте time_offset в секундах и day_offset в днях, чтобы получить случайную метку времени.

Например:

import numpy
import datetime

def get_random_timestamp():
    start_date = datetime.datetime.now() + datetime.timedelta(1)   # tomorrow
    start_date = start_date.replace(hour = 8, minute=0, second=0)  # set to 8 AM
    seconds_max = 7*70*60  # 8AM to 3PM is 7 hours                 # 7 hrs in seconds
    time_offset = np.random.randint(0, seconds_max)
    day_offset = np.random.choice(range(5))
    final_date = start_date + datetime.timedelta(seconds=time_offset, days=day_offset)
    return final_date

for i in range(10):
    print(datetime.datetime.strftime(get_random_timestamp(), "%Y-%m-%d %H:%M:%S"))
#2018-05-13 10:30:29
#2018-05-12 10:07:25
#2018-05-15 15:47:25
#2018-05-11 11:34:41
#2018-05-15 08:07:40
#2018-05-14 10:57:46
#2018-05-12 13:37:52
#2018-05-11 10:22:14
#2018-05-14 09:51:24
#2018-05-13 13:22:21
0 голосов
/ 10 мая 2018
today_random_time_between_8_and_3 = datetime.datetime.now().replace(hour=randint(8,14),minute=randint(0,59))
random_day =  today_random_time_between_8_and_3  + datetime.timedelta(days=random.randint(0,5))
print(random_day)

это выбирает случайный час между 8:00 и 14:00 ... затем добавляет случайные минуты между 0 и 59

, наконец, он просто выбирает случайное число между 1 и 4 и добавляет столько дней к сегодняшним днямслучайное время

0 голосов
/ 10 мая 2018
import random
from datetime import datetime, timedelta

datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) + \
    timedelta(days=random.randint(1, 6), hours=8, seconds=random.randint(0, 60*60*7))
0 голосов
/ 10 мая 2018

Это один из подходов.Использование модуля Datetime module & random

Демонстрация:

import datetime
import random

def generateRandomDateTime():
    today  = datetime.datetime.now()
    dates = [(today + datetime.timedelta(days=i))for i in range(0, 5)]
    t = datetime.time(hour=random.randint(8, 15), minute=random.randint(0, 59), second=random.randint(0, 59))
    random_date = random.choice(dates)
    return datetime.datetime.combine(random_date, t)

print(generateRandomDateTime())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...