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”;你能救我吗?
答案 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;
。
请参考data1
和data2
,直接复制/粘贴您的代码 ,但您的变量名为date1
和date2
。但是,如果这些变量在其他地方被声明,那么这可能已经是你的错误了。