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:707data2:2011-05-12 08:56:52 +0000
2011-05-12 10:57:00.402项目297:707data1:2011-05-13 00:00:00 +0000
我不明白为什么句点是"0",一定是“1”,你能帮我吗?
发布于 2011-05-12 17:19:06
NSTimeInterval只是一个双精度型,所以你不需要先把它转换成一个字符串,然后再转换回一个整型。
如果你这样做会发生什么:
NSTimeInterval diff = [data2 timeIntervalSinceDate:date1];
int period = (int)diff/3600/24;
NSLog(@"period:%d", period);另外,如果interval is diff小于3600*24,则diff/3600/24的结果将小于1,因此int值将被展平为0。
发布于 2011-05-12 17:21:56
date2是当前日期。不知道为什么period应该是这里的一个。
在撰写本文时,diff大约是。-53000。除以它会使它变为零,这是您所期望的结果。
还要记住,NSTimeInterval是一个浮点数,您通过字符串将其转换为整数,这将丢弃小数。
通过字符串进行这种转换是没有意义的--只需使用int seconds = (int) diff;即可。
请直接复制/粘贴您的代码,因为您引用的是data1和data2,但是您的变量名为date1和date2。但是,如果这些变量是在其他地方声明的,那么这可能已经是您的bug。
https://stackoverflow.com/questions/5975658
复制相似问题