В этой небольшой статье я опишу, как сгенерировать случайную дату в заданном диапазоне.
Реализацию на Delphi можно найти здесь.
Алгоритм генерации случайной даты достаточно простой:
- Находим разницу в днях между даты «от» и даты «до»;
- Добавляем к дате «от» случайное значение от 0 до найденной разницы в первом шаге;
- ???
- PROFIT!!1
Реализация на C#:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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# это будет выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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; } |
Вот и всё 🙂