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

时间:2016-01-21 16:12:24

标签: ios objective-c ios9 nstimeinterval

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

我希望iOS在09:30 AM到11:30 AM之间创建一个时间。

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

1 个答案:

答案 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两者都有明确定义的序列(包括程序启动时的第一个值)并且不是特别高级的随机数发电机。如果前者有问题,我建议在程序启动时srand48seed48,如果您想要消除这两个问题,我会建议((double)arc4random() / UINT32_MAX)代替drand48 - 尽管这会减少你可以从2 ^ 48到2 ^ 32命中的输出值的数量,它仍然可以在任何合理的时间间隔内得到亚秒的决定。