NSDate的dateWithTimeIntervalSinceNow中的否定NSTimeInterval:

时间:2012-04-24 23:59:12

标签: objective-c ios nsdate

From the iOS docs:

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;
}

它应该从近期产生半随机日期和时间。

1 个答案:

答案 0 :(得分:7)

正如Hot Licks所说,这是因为在将数字设为负数而不是先取消数字后再投射到NSTimeInterval然后再投射它。

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

NSDate* date = [NSDate dateWithTimeIntervalSinceNow:-(NSTimeInterval)((u_int32_t)i * 12 * 60 * 60 + arc4random_uniform(8 * 60 * 60))];