2

来自 iOS 文档:

seconds
The number of seconds from the current date and time for the new date. Use a negative value to specify a date before the current date.

然而,这段代码给出了 2148 年的日期:

#import <Foundation/Foundation.h>
#import <stdlib.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        for(int i = 0; i < 30; i++) {
            NSDate* date = [NSDate dateWithTimeIntervalSinceNow:(NSTimeInterval)-((u_int32_t)i * 12 * 60 * 60 + arc4random_uniform(8 * 60 * 60))];
            NSLog(@"%@", date);
        }

    }
    return 0;
}

它应该从最近的过去生成半随机的日期和时间。

4

1 回答 1

7

正如 Hot Licks 所说,这是由于在将数字设为负数后转换为 NSTimeInterval 而不是先否定数字然后再转换它。

该行的固定版本将如下所示:

NSDate* date = [NSDate dateWithTimeIntervalSinceNow:-(NSTimeInterval)((u_int32_t)i * 12 * 60 * 60 + arc4random_uniform(8 * 60 * 60))];
于 2012-05-30T18:57:15.063 回答