iOS:NSDate和NSDateComponent的问题

时间:2011-05-12 09:00:30

标签: objective-c xcode nsdate nsdatecomponents nstimeinterval

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setTimeZone:[ NSTimeZone timeZoneForSecondsFromGMT:(+0*3600) ] ] ;
[components setYear:2011];
[components setDay:13];
[components setMonth:5];
NSDate *date1 = [gregorianCalendar dateFromComponents:components];
NSDate *date2 = [[NSDate alloc] init];


    NSTimeInterval diff = [data2 timeIntervalSinceDate:date1];
    NSString *intervalString = [NSString stringWithFormat:@"%f", diff];
    int second = [intervalString intValue];
    int period = second/3600/24; 
    NSLog(@"period:%d", period);
    NSLog(@"date1:%@", data1);
    NSLog(@"date2:%@", data2);

在consol中,结果是:

2011-05-12 10:57:00.406项目[297:707]期间:0;

2011-05-12 10:57:00.375项目[297:707] data2:2011-05-12 08:56:52 +0000

2011-05-12 10:57:00.402 Project [297:707] data1:2011-05-13 00:00:00 +0000

我不明白为什么句号是“0”,它必须是“1”;你能救我吗?

2 个答案:

答案 0 :(得分:0)

NSTimeInterval只是一个double,所以你不需要将它转换为字符串然后再转换为int。

如果您执行以下操作会发生什么:

NSTimeInterval diff = [data2 timeIntervalSinceDate:date1];
int period = (int)diff/3600/24; 
NSLog(@"period:%d", period);

同样,如果间隔为diff小于3600 * 24,则diff / 3600/24的结果将小于1,因此int值将被展平为0。

答案 1 :(得分:0)

date2是当前日期。不知道为什么period 应该在这里。

在撰写本文时,差异大约是。 -53000。划分它会使它达到零并且是预期的。

还要记住,NSTimeInterval是一个浮点数,你将它通过一个字符串转换为一个整数,这将从分数中删除。

通过字符串进行转换时,没有意义 - 只需使用int seconds = (int) diff;

请参考data1data2,直接复制/粘贴您的代码 ,但您的变量名为date1date2 。但是,如果这些变量在其他地方被声明,那么这可能已经是你的错误了。