Привет, как я могу получить случайную дату с часами и минутами в диапазоне от настоящего момента до 2 или 3 дней назад. ??

Спасибо всем

Что-то вроде этого даты с минутами

23.10.2018 16:32:00

23.10.2018 17:31:00

23.10.2018 1:32:00

22.10.2018 14:00:00

Здесь я могу получить даты в диапазоне, скажем, 2 дня, но час тот же

public static DateTime NextDateTime(int endDatenumbers)
{
    DateTime startDate = DateTime.Today;

    DateTime endDate = startDate.AddDays(-endDatenumbers);

    var newDate = startDate.AddHours(new Random(Convert.ToInt32(DateTime.Now.Ticks / int.MaxValue)).Next(0, (int)(endDate - startDate).TotalHours));

    return newDate;
}
c#
-2
Kan 23 Окт 2018 в 23:05

2 ответа

Лучший ответ

Следующая логика фактически вычисляет количество минут между двумя днями. Это важно там, где ваши дни потенциально могут пересечь границу летнего времени. Кроме того, я сохраняю значение «сегодня», поскольку технически (хотя и маловероятно) оно может измениться между двумя вызовами.

    private static DateTime PickRandomMinute(int inPastNDays, Random random)
    {
        DateTime today = DateTime.Today;
        int totalMinutes = (int)(today - today.AddDays(-inPastNDays)).TotalMinutes;
        return today.AddDays(-inPastNDays).AddMinutes(random.Next(totalMinutes));
    }

Пример использования:

        Random random = new Random();
        Console.WriteLine(PickRandomMinute(2, random)); // 22/10/2018 9:34:00 PM (for example)
        Console.WriteLine(PickRandomMinute(2, random)); // 23/10/2018 4:55:00 AM (for example)

Вы не хотите создавать новый Random в этом методе, потому что вызовы, которые происходят очень близко друг к другу, вероятно, закончатся одним и тем же семенем и, следовательно, вернут то же время.

1
Adam G 23 Окт 2018 в 22:57

Вы должны упростить это до 1 случайного вызова. Получите самый дальний день, который был 3 дня назад.

var furthestDate= DateTime.Today.AddDays(-3);

Ваш диапазон на самом деле составляет 2 дня после этой даты, которая составляет (48 часов * 60 минут) = 2880 минут. Так что все, что было с этой даты и через 2880 минут после нее, действительно. Просто получите 1 случайное число от 0 до 2880. Наконец, просто добавьте минуты к самой дальней дате.

var randomDate = furthestDate.AddMinutes(YouRandomNumber);
2
Franck 23 Окт 2018 в 20:22
52957071