Генерация даты и времени в заданом диапазоне [C#]
В этой небольшой статье я опишу, как сгенерировать случайную дату в заданном диапазоне.
Алгоритм генерации случайной даты достаточно простой:
- Находим разницу в днях между даты «от» и даты «до»;
- Добавляем к дате «от» случайное значение от 0 до найденной разницы в первом шаге;
- ???
- 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;
} 
			