Генерация Даты И Времени В Заданом Диапазоне [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;
}