1
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);

结果是:

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 项目[297:707] data1:2011-05-13 00:00:00 +0000

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

4

2 回答 2

0

NSTimeInterval 只是一个双精度数,因此您不需要将其转换为字符串然后再转换回 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。

于 2011-05-12T09:19:06.247 回答
0

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

在撰写本文时,差异约为。-53000。将其除以您得到的结果和预期的结果为零。

另请记住,NSTimeInterval 是一个浮点数,您正在通过字符串将其转换为整数,这将丢弃分数。

通过字符串进行这种转换是没有意义int seconds = (int) diff;的——只需使用.

请直接复制/粘贴您的代码,如您所指的data1and data2,但您的变量称为date1and date2。但是,如果这些变量在其他地方声明,这可能已经是你的错误了。

于 2011-05-12T09:21:55.633 回答