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

vip_pvl

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

doc

Client
Регистрация
30.03.2012
Сообщения
8 614
Благодарностей
4 602
Баллы
113

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 880
Баллы
113
Нужно сгенерировать рандом дату в пределах и положить в переменную А.
К примеру есть начальная дата вида: 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

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 040
Баллы
113
Как то так
Код:
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

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 040
Баллы
113
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));
 

vip_pvl

Client
Регистрация
07.08.2015
Сообщения
28
Благодарностей
9
Баллы
3
Спасибо, код работает, но в результате не тот формат даты.
На выходе получается так: Пн 29.08.16 1:15:32
А нужно 2016-08-29 01:15:32

Т.е. без Пн и пробела после него и в часах не 1, а 01
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Исправь последнюю строку на такую:
Код:
return start.AddDays(gen.Next(range)).ToString("yyyy-MM-dd HH:mm:ss");
 

vip_pvl

Client
Регистрация
07.08.2015
Сообщения
28
Благодарностей
9
Баллы
3
Спасибо - то, что нужно!
 

kagorec

Client
Регистрация
24.08.2013
Сообщения
927
Благодарностей
481
Баллы
63
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));
Подскажи, как указать "сегодняшнюю" стартовую дату диапазона?)
 

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
742
Баллы
113

kagorec

Client
Регистрация
24.08.2013
Сообщения
927
Благодарностей
481
Баллы
63
Старт самая первая строка, там написано старт и финиш
Спасибо))

Вопрос был - как указать корректно текущую дату (для "start")?
C#:
DateTime start = DateTime.Now;
start.ToString("yyyy-MM-dd HH:mm:ss");
DateTime finish = DateTime.Parse("2029-10-02 01:15:32");
Решил пока так
 
Последнее редактирование:

kagorec

Client
Регистрация
24.08.2013
Сообщения
927
Благодарностей
481
Баллы
63
Пример снипета для отложенной даты постов 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

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