2016-01-21 1 views
2

Я пытаюсь создать случайное время для уведомления произойти, что между двумя временами, диапазоном ...случайного времени между два раза (диапазон) IOS SDK

Я хотел IOS, чтобы создать время между 09:30 и 11:30.

Я думал о том, чтобы использовать генератор случайных чисел для часов и еще один для минут, а затем выполнить некоторые проверки, чтобы убедиться, что он находится между 09:30 и 11:30, но думал, что может быть более простой способ делайте это, не слишком вовлекаясь. любая помощь будет принята с благодарностью.

+0

Должно ли это время быть ровным числом минут или секунд, или вы хотите, чтобы это было действительно случайным, т. Е. Доли секунды? – matt

ответ

7

Получить 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 , он все равно должен принимать решения в соответствии с второстепенными сроками.

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