Случайное время между двумя временами (диапазон) iOS SDK
Я пытаюсь создать случайное время для уведомления, которое находится между двумя временами, диапазоном...
Я бы хотел, чтобы iOS создавала время между 9:30 и 11:30.
Я думал о том, чтобы использовать генератор случайных чисел для часов, а другой - для минут, а затем сделал несколько проверок, чтобы убедиться, что это между 9:30 и 11:30, но подумал, что может быть более простой способ сделать это без слишком увлекаться любая помощь будет принята с благодарностью.
1 ответ
Получить NSTimeInterval
за период между двумя датами; получить одно случайное число в этом диапазоне; получить новую дату по смещению от первой.
/*! Returns a random date in the range [start, end)
@param start The lower bound for random dates; returned dates will be equal to
or after the start date.
@param end The upper bound for random dates; dates will be before the end date.
@returns A random date.
*/
- (NSDate *)randomDateBetweenStart:(NSDate *)start end:(NSDate *)end
{
NSTimeInterval window = [end timeIntervalSinceDate:start];
NSTimeInterval randomOffset = drand48() * window;
return [start dateByAddingTimeInterval:randomOffset];
}
Дополнение, полтора года спустя: редактирование указало, что drand48
оба имеют четко определенную последовательность (включая первое значение после запуска программы) и не являются особенно продвинутым генератором случайных чисел. рекомендую srand48
или же seed48
при запуске программы, если первая проблема, и что-то вроде ((double)arc4random() / UINT32_MAX)
на месте drand48
если вы хотите устранить обе проблемы - хотя это уменьшает количество выходных значений, которые вы можете набрать, с 2^48 до 2^32, оно все равно должно принимать решения за доли секунды в течение любого разумного интервала времени.