随机时间的两倍(范围)的iOS SDK之间
问题描述:
我试图创建一个随机的时间出现一个通知的两倍,射程之间...随机时间的两倍(范围)的iOS SDK之间
我想的iOS创建时间从上午09:30到上午11:30。
我正在考虑使用随机数发生器的小时和另一个分钟,然后做一些检查,以确保它在09:30 AM和11:30 AM之间,但认为可能有一个更简单的方法不要太参与。任何帮助将不胜感激。
答
获取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 ,它仍然应该在任何合理的时间间隔内让你做出次要的决定。
难道这个时候必须是偶数分钟,或秒钟,或者你希望它是真正随机的,即秒的分数? – matt