Как сгенерировать рандом дату в пределах

  • Автор темы Автор темы vip_pvl
  • Дата начала Дата начала

vip_pvl

Client
Регистрация
07.08.2015
Сообщения
28
Реакции
9
Баллы
3
Нужно сгенерировать рандом дату в пределах и положить в переменную А.
К примеру есть начальная дата вида: 2016-01-02 01:15:32
и конечная дата вида 2016-12-25 21:47:53
Нужно получить любую дату между ними и положить в переменную А.
 
Нужно сгенерировать рандом дату в пределах и положить в переменную А.
К примеру есть начальная дата вида: 2016-01-02 01:15:32
и конечная дата вида 2016-12-25 21:47:53
Нужно получить любую дату между ними и положить в переменную А.

Как то так
Код:
Развернуть Свернуть Копировать
DateTime start = DateTime.Parse("2016-01-02 01:15:32");
DateTime finish = DateTime.Parse("2016-10-02 01:15:32");

int utcStart = (int)(start - new DateTime(1970, 1, 1)).TotalSeconds;
int utcfinish = (int)(finish - new DateTime(1970, 1, 1)).TotalSeconds;

int seconds = utcfinish - utcStart;
  
Random rnd = new Random(Global.Variables.MainRandom.GetNext());
int add = rnd.Next(0,seconds);

return start.AddSeconds(add);

Ошибочка вышла, отредактировал.
 
Последнее редактирование:
  • Спасибо
Реакции: vip_pvl
Как то так
Код:
Развернуть Свернуть Копировать
DateTime start = DateTime.Parse("2016-01-02 01:15:32");
DateTime finish = DateTime.Parse("2016-10-02 01:15:32");

int utcStart = (int)(start - new DateTime(1970, 1, 1)).TotalSeconds;
int utcfinish = (int)(finish - new DateTime(1970, 1, 1)).TotalSeconds;

Random rnd = new Random(Global.Variables.MainRandom.GetNext());
int add = rnd.Next(utcStart,utcfinish);

return start.AddSeconds(add);

чёт рандом через чур в будущее ушёл

2016-11-16_192532.png
 
  • Спасибо
Реакции: ZennoScript
C#:
Развернуть Свернуть Копировать
DateTime start = DateTime.Parse("2016-01-02 01:15:32");
DateTime finish = DateTime.Parse("2016-10-02 01:15:32");

Random gen = new Random();
int range = (finish - start).Days;
return start.AddDays(gen.Next(range));
 
Спасибо, код работает, но в результате не тот формат даты.
На выходе получается так: Пн 29.08.16 1:15:32
А нужно 2016-08-29 01:15:32

Т.е. без Пн и пробела после него и в часах не 1, а 01
 
Исправь последнюю строку на такую:
Код:
Развернуть Свернуть Копировать
return start.AddDays(gen.Next(range)).ToString("yyyy-MM-dd HH:mm:ss");
 
Спасибо - то, что нужно!
 
C#:
Развернуть Свернуть Копировать
DateTime start = DateTime.Parse("2016-01-02 01:15:32");
DateTime finish = DateTime.Parse("2016-10-02 01:15:32");

Random gen = new Random();
int range = (finish - start).Days;
return start.AddDays(gen.Next(range));
Подскажи, как указать "сегодняшнюю" стартовую дату диапазона?)
 
Старт самая первая строка, там написано старт и финиш
Спасибо))

Вопрос был - как указать корректно текущую дату (для "start")?
C#:
Развернуть Свернуть Копировать
DateTime start = DateTime.Now;
start.ToString("yyyy-MM-dd HH:mm:ss");
DateTime finish = DateTime.Parse("2029-10-02 01:15:32");
Решил пока так
 
Последнее редактирование:
Пример снипета для отложенной даты постов Wordpress, в рабочие часы с 8 до 19
C#:
Развернуть Свернуть Копировать
//Создание объекта для генерации чисел
Random rnd = new Random();
//Дата отложенной публикации, на сколько дней +
int value = rnd.Next(1, int.Parse(project.Variables["date_day_publ"].Value));

// Дневное рабочее время
var hour = Macros.TextProcessing.Spintax("{08|09|10|11|12|13|14|15|16|17|18|19}");
// Текущее время минуты секунды
string minutsecund = DateTime.Now.ToString("mm:ss");
//указываем произвольную дату
DateTime dt1 = DateTime.Now;
//прибавим value дня к дате dt1
DateTime dt2 = dt1.AddDays(value);
//return dt2;
return dt2.ToString("yyyy-MM-dd") + '_' + hour + ':' + minutsecund;
 
  • Спасибо
Реакции: daymos, udder и S10n4eg

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