Рандомное время из диапазона

Tsuk15

Client
Регистрация
25.04.2017
Сообщения
102
Благодарностей
40
Баллы
28
Всем привет. Столкнулся с проблемой, нужно взять радомное время из двух диапазонов 1) 8:00-10:00 2) 23:00-01:20(следующего дня).
На форуме нашел вот такой сниппет:
Код:
var rnd = new Random();
return DateTime.Parse("2013-06-27 01:03:19").Add(TimeSpan.FromSeconds((rnd.Next(86400, (int)(DateTime.Parse("2014-01-28 05:07:13").Subtract(DateTime.Parse("2013-06-27 01:03:19")).TotalSeconds))))).ToString();

var rnd = new Random();
return DateTime.Parse(project.Variables["god_ot"].Value).Add(TimeSpan.FromSeconds((rnd.Next(86400, (int)(DateTime.Parse(project.Variables["god_do"].Value).Subtract(DateTime.Parse(project.Variables["god_ot"].Value)).TotalSeconds))))).ToString(); //если с переменными
Но этот код не срабатывает в пределах одного дня и выдает ошибку "
Выполнение действия CSharp OwnCode minValue не может быть больше maxValue.
Имя параметра: minValue" И время у меня изначально без даты, подставлять её - это лишние действия.
Подскажите пожалуйста решение этой проблемы:bn:
P.s Я примерно представляю как сделать на костылях, например можно все в UNIX перевести, ну или тупо спарсить часы и минуты и отдельно рандомизировать(хотя с переменой дня это уж очень на костылях будет). Но я хочу сделать все красиво и узнать что-то новое:-)
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 169
Баллы
113
я за костыли с переводом в UNIX, вычетом разницы между датами, выводом рандомного числа в пределах этой разницы, переводом обратно из UNIX в норм дату.

UPD: или как я из говна и палок:
гуглим random date c#
https://stackoverflow.com/questions/194863/random-date-in-c-sharp
делаю быдлокод:
Код:
DateTime start = DateTime.Parse("2017-10-15 10:01:19 AM");
DateTime finish = DateTime.Parse("2017-10-15 10:03:19 AM");
TimeSpan Time_diff = finish - start;  // считаем разницу
double t = Math.Floor(Time_diff.TotalSeconds); // переводим разницу в секунды
int t2 = Convert.ToInt32(t); // конвертируем в int
Random rand = new Random();
int i = rand.Next(0, t2); // получаем рандом из диапазона в секундах от нуля до предела нашей разницы
return start.AddSeconds(i); // добавляем к стартовой дате наш рандом в секундах
 
Последнее редактирование:
  • Спасибо
Реакции: impul5e и AgentRassilok

Tsuk15

Client
Регистрация
25.04.2017
Сообщения
102
Благодарностей
40
Баллы
28
я за костыли с переводом в UNIX, вычетом разницы между датами, выводом рандомного числа в пределах этой разницы, переводом обратно из UNIX в норм дату.

UPD: или как я из говна и палок:
гуглим random date c#
https://stackoverflow.com/questions/194863/random-date-in-c-sharp
делаю быдлокод:
Код:
DateTime start = DateTime.Parse("2017-10-15 10:01:19 AM");
DateTime finish = DateTime.Parse("2017-10-15 10:03:19 AM");
TimeSpan Time_diff = finish - start;  // считаем разницу
double t = Math.Floor(Time_diff.TotalSeconds); // переводим разницу в секунды
int t2 = Convert.ToInt32(t); // конвертируем в int
Random rand = new Random();
int i = rand.Next(0, t2); // получаем рандом из диапазона в секундах от нуля до предела нашей разницы
return start.AddSeconds(i); // добавляем к стартовой дате наш рандом в секундах
И на этом спасибо) не стал ждать более прогрессивных решений и добавил свои костыли к твоим :D:D
Код:
DateTime start = DateTime.Parse(project.Variables["Random_1"].Value); //время в формате hh:mm (например 8:00)
DateTime finish = DateTime.Parse(project.Variables["Random_2"].Value); //время в формате hh:mm (например 1:30 следующего дня)
if(finish < start)   //вот тут проверяем переход с одного дня на следующий
{
    DateTime finish_2 = DateTime.Parse(project.Variables["Random_2"].Value).AddDays(1); //если есть переход дня, то увеличиваем дату на 1 день
    TimeSpan Time_diff = finish_2 - start;  // считаем разницу
    double t = Math.Floor(Time_diff.TotalSeconds); // переводим разницу в секунды
    int t2 = Convert.ToInt32(t); // конвертируем в int
    Random rand = new Random();
    int i = rand.Next(0, t2); // получаем рандом из диапазона в секундах от нуля до предела нашей разницы
    return start.AddSeconds(i).ToString("HH:mm"); // добавляем к стартовой дате наш рандом в секундах, вывожу в формате (HH:mm), который мне и нужен
}
else //если расчет ведется в пределах одного дня
{
    TimeSpan Time_diff = finish - start;  // считаем разницу
    double t = Math.Floor(Time_diff.TotalSeconds); // переводим разницу в секунды
    int t2 = Convert.ToInt32(t); // конвертируем в int
    Random rand = new Random();
    int i = rand.Next(0, t2); // получаем рандом из диапазона в секундах от нуля до предела нашей разницы
    return start.AddSeconds(i).ToString("HH:mm"); // добавляем к стартовой дате наш рандом в секундах, вывожу в формате (HH:mm), который мне и нужен
}
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)