我正在尝试创建一个随机时间,以便在两次之间发生通知,范围......
我希望iOS在09:30 AM到11:30 AM之间创建一个时间。
我正在考虑使用随机数生成器作为小时,另一个使用分钟,然后进行一些检查以确保它是在上午09:30到11:30之间但是认为可能有更简单的方法它没有太多参与。任何帮助将不胜感激。
答案 0 :(得分: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命中的输出值的数量,它仍然可以在任何合理的时间间隔内得到亚秒的决定。