随机时间介于两次(范围)iOS SDK之间

Osc*_*uch 2 objective-c nstimeinterval ios ios9

我正在尝试创建一个随机时间,通知发生在两次之间,范围......

我希望iOS创建一个介于09:30 AM到11:30 AM之间的时间.

我想在几个小时内使用随机数生成器,在分钟中使用另一个,然后进行一些检查以确保它是在上午09:30到11:30之间但是认为可能有更简单的方法来完成它过于介入.任何帮助将不胜感激.

Tom*_*mmy 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];
}
Run Code Online (Sandbox Code Playgroud)

附录,一年半之后:编辑指出drand48两者都有明确定义的序列(包括程序启动的第一个值),并不是一个特别先进的随机数生成器.我建议srand48或者seed48在程序启动时,如果前者是一个问题,并且如果你想要消除这两个问题((double)arc4random() / UINT32_MAX),drand48那么就代替了- 尽管这会减少你可以从2 ^ 48到2 ^ 32的输出值,它仍然应该在任何合理的时间间隔内为您做出亚秒级的决定.