两次之间的随机时间(一个范围)iOS SDK

Random Time in between two times (a range) iOS SDK

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

我想 iOS 在 09:30AM 和 11:30AM 之间创造一个时间。

我正在考虑使用随机数生成器计算小时数,使用另一个随机数生成器计算分钟数,然后进行一些检查以确保它在 09:30AM 和 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];
}

附录,year-and-a-half 之后:编辑指出 drand48 都有一个 well-defined 序列(包括程序启动的第一个值)并且不是特别高级随机数发生器。如果前者有问题,我建议在程序启动时使用 srand48seed48,如果您想消除这两个问题,我建议用 ((double)arc4random() / UINT32_MAX) 代替 drand48——尽管这样可以减少你可以从 2^48 到 2^32 的输出值数量,它仍然应该让你在任何合理的时间间隔内做出 sub-second 决定。