比较NSMutableArray NSDateComponent中多个日期之间的时间仅返回第一个日期的值

时间:2014-05-31 17:54:52

标签: ios objective-c date nsmutablearray

基本上我有一个可以包含多个NSManagedObjects的数组我尝试对这些对象进行排序,对于那些有开始日期我要比较开始日期和现在或开始日期之间的时间和如果设置了结束日期。最后设置一个计时器,在一秒钟内刷新这些信息。

我遇到的问题是比较时间时间只返回第一个对象的值和开始日期。如果我在开始日期添加另一个值,则时间设置为0,并在我希望将它们添加到一起时重新开始。

如果您需要更多信息,请告诉我

我之前使用了for(object * obj in Array)然而它似乎有更多问题

int time = 0;
if([_ttimes count] != 0){

    for(int i=0; i < [_ttimes count]; ++i){
        TTime *tTime = [_ttimes objectAtIndex:i];
        NSLog(@"time%i", i);
        if(tTime.sDate){
            NSCalendar *cal = [NSCalendar currentCalendar];
            NSDate *date = [NSDate date];
            if(tTime.eDate){
                date = tTime.eDate;
            }
            NSDateComponents *component = [cal components:NSSecondCalendarUnit fromDate:tTime.sDate toDate:date options:0];
            int tmpTime = [component second];
            time = time + tmpTime;
        }
    }
    _ticketTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(TotalWorkTime) userInfo:nil repeats:NO];
}

将方法更改为:

-(void)TotalWorkTime{ double time = 0; if([_ttimes count] != 0){ for(TTime *tTime in _ttimes){ NSDate *date = [NSDate date]; if(tTime.eDate){ date = tTime.eDate; } NSTimeInterval timerint = -[tTime.sDate timeIntervalSinceDate:date]; time = time + timerint; } NSLog(@"Time:%f", time); } }

这似乎返回了更准确的时间,但是谢谢你Zaph但是这仍然没有解决时间+ = timerint不能正常工作的问题这个数字每次添加一个新对象时重置它也只返回值添加的最后一个对象。

1 个答案:

答案 0 :(得分:0)

NSDateComponents components:NSSecondCalendarUnit的问题在于它只返回0-59。 (极少数例外)

此外,由于你每秒都会发射一个计时器,所以很有可能第二个(0-59)是相同的。要检查此项,请在if(tTime.sDate)之后添加日志记录:

NSLog(@"tTime.sDate: %@", tTime.sDate);

并查看日期是否真的相同,只是秒数相同。

而不是:

NSDateComponents *component = [cal components:NSSecondCalendarUnit fromDate:tTime.sDate toDate:date options:0];
int tmpTime = [component second];
time = time + tmpTime;

试试这个:

NSTimeInterval tmpTime = -[tTime.sDate timeIntervalSinceDate:date];
time += tmpTime;