2013-11-18 2 views
2

Я автоматизирую приложение, где записи могут быть открыты между указанными диапазонами дат. Я знаю, что я могу создать массив, который случайным образом выбирает число в моем массиве, например:Как я могу генерировать случайные даты в пределах диапазона?

DateTime.Now.AddDays(90).ToString("MM/dd/yyyy") 

Однако, я хотел бы знать, если есть лучший способ пойти об этом. Пожалуйста помоги! Благодарю.

+1

Попробуйте следующее: http://stackoverflow.com/questions/194863/random-date-in-c-sharp –

+1

Не используйте в качестве параметров для столбцов 'datetime' строки в базе данных. –

ответ

14
void Main() 
{ 
    Console.WriteLine(DateTime.UtcNow.AddDays(new Random().Next(90))); 
} 

Это добавит случайное количество дней к дате начала, по существу заканчивая случайной датой.

+0

Спасибо, Jeroen. Это работает для меня, когда я добавляю ToString, поскольку мне нужно, чтобы это была строка в моем приложении. Отличная работа! – user2917239

1

Предполагая, что вы хотите, чтобы даты находились в диапазоне 90 дней с даты генерации. Затем вы можете попробовать следующее:

int seed = (int)DateTime.Now.Ticks; 
int days = seed % 90; 
DateTime.Now.AddDays(days).ToString("MM/dd/yyyy"); 

Вы можете, конечно, реорганизовать это. Я был многословным для ясности. Вы также можете изменить целочисленное значение 90 на любое целое число, которое вы хотите быть верхней границей вашего диапазона.

Надеюсь, это поможет.

+0

Я предлагаю против использования Ticks для генерации случайных чисел. В лучшем случае они должны быть семенем для реального генератора случайных чисел. Количество меток может быть недостаточно «гладким» и может быть явно неслучайным при повторном использовании. Решение Jeroen выше, лучше, поскольку новый Random() по умолчанию использует tickcount как семя. –

+0

Действительно? Голос? Почему бы просто не проголосовать за ответ, который вам нравится? (Он вошел в то же самое время, когда я вошел в мой - кстати). Мой ответ правильный и работает. Случайный объект имеет те же ограничения, что и использование Ticks. Проблема с тиками заключается в том, что Windows не обновляет значение на очень малом интервале. Поэтому, если вы вызвали несколько раз за короткий промежуток времени, вы могли бы использовать одно и то же семя. Использование класса Random аналогично в интервале ~ 16 мс. Поэтому мне все равно, какой из них вы используете, но ваш голосующий голос необоснован. –

+1

Я не спускал вниз, но я могу видеть, как это происходит. Ваше решение не является случайным вообще, и, как вы сказали, может генерировать повторяющиеся значения, если вы вызываете их в замкнутом цикле. Если вы используете 'Random' [правильно] (http://stackoverflow.com/questions/767999/random-number-generator-only-generating-one-random-number/768001#768001) (помещая его вне метода тело как локальный класс или статическую переменную), вы можете называть его так быстро, как хотите, и получать случайные значения каждый раз. –

Смежные вопросы