Генерация даты и времени в заданом диапазоне [C#]

0

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

Алгоритм генерации случайной даты достаточно простой:

  1. Находим разницу в днях между даты «от» и даты «до»;
  2. Добавляем к дате «от» случайное значение от 0 до найденной разницы в первом шаге;
  3. ???
  4. PROFIT!!1

Реализация на C#:

static DateTime GenRandomDate( DateTime from, DateTime to, Random random = null )
{
	if ( from >= to )
	{
		throw new Exception( "Параметр \"from\" должен быть меньше параметра \"to\"!" );
	}
	if ( random == null )
	{
		random = new Random();
	}
	int daysDiff = ( to - from ).Days;
	return from.AddDays( random.Next( daysDiff ) );
}

Этот метод возвратит случайную дату в указанном диапазоне, т.е. время случайной даты будет равно времени параметра «to«. Чтобы решить эту проблему необходимо немного улучшить алгоритм: будем создавать новый объект класса TimeSpan, передавая в конструктор произведение случайного числа в диапазоне между 0.0-1.0 и разницу тиков между параметрами «to» и «from«.
На C# это будет выглядеть следующим образом:

static DateTime GenRandomDateTime( DateTime from, DateTime to, Random random = null )
{
	if ( from >= to )
	{
		throw new Exception( "Параметр \"from\" должен быть меньше параметра \"to\"!" );
	}
	if ( random == null )
	{
		random = new Random();
	}
	TimeSpan range = to - from;
	var randts = new TimeSpan( (long)( random.NextDouble() * range.Ticks ) );
	return from + randts;
}
0
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Авторизация
*
*
Регистрация
*
*
*
Пароль не введен
*
Генерация пароля
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x