2016-01-21 65 views
2

我试图创建一个随机的时间出现一个通知的两倍,射程之间...随机时间的两倍(范围)的iOS SDK之间

我想的iOS创建时间从上午09:30到上午11:30。

我正在考虑使用随机数发生器的小时和另一个分钟,然后做一些检查,以确保它在09:30 AM和11:30 AM之间,但认为可能有一个更简单的方法不要太参与。任何帮助将不胜感激。

+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既有良好定义的序列(包括计划推出的第一个值),而不是特别先进的随机数发电机。我建议srand48seed48在程序启动,如果前者是一个问题,像((double)arc4random()/UINT32_MAX)代替drand48,如果你想消除这两个问题 - 尽管这降低了输出值的数量,你可以打2^48〜2^32 ,它仍然应该在任何合理的时间间隔内让你做出次要的决定。