2015-02-23 2 views
0

я знаю, как получить разницу между двумя NSDate как последовать заIOS - Сравнение NSDate с другим NSDate

NSTimeInterval timeInterval = [[NSDate date] timeIntervalSinceDate:anyPreviousDate]; 

и я знаю, что вернет меня NSTimeInterval в положительных секунд. то, что я хочу знать, это то, что он вернет, если мой anyPreviousDate больше [NSDate date], т. е. anyPreviousDate не был передан, он появится в будущем.

просто любопытно, если кто-то сделал это раньше.

Заранее спасибо.

+2

От doc: Интервал между получателем и параметром anotherDate. Если приемник раньше другогоДата, возвращаемое значение отрицательное. Если anotherDate равен нулю, результаты не определены. – Andrea

ответ

1

Я нашел еще один очень хороший подход, чтобы сделать то же самое ... вот код, я решил поделиться им с stackoverflow. Cocoa has couple of methods for this:

в NSDate

– isEqualToDate: 
– earlierDate: 
– laterDate: 
– compare: 

При использовании - (NSComparisonResult)compare:(NSDate *)anotherDate, вы получаете назад один из них:

The receiver and anotherDate are exactly equal to each other, NSOrderedSame 
The receiver is later in time than anotherDate, NSOrderedDescending 
The receiver is earlier in time than anotherDate, NSOrderedAscending. 

пример:

NSDate * now = [NSDate date]; 
NSDate * mile = [[NSDate alloc] initWithString:@"2001-03-24 10:45:32 +0600"]; 
NSComparisonResult result = [now compare:mile]; 

NSLog(@"%@", now); 
NSLog(@"%@", mile); 

switch (result) 
{ 
    case NSOrderedAscending: NSLog(@"%@ is in future from %@", mile, now); break; 
    case NSOrderedDescending: NSLog(@"%@ is in past from %@", mile, now); break; 
    case NSOrderedSame: NSLog(@"%@ is the same as %@", mile, now); break; 
    default: NSLog(@"erorr dates %@, %@", mile, now); break; 
} 

[mile release]; 
0

Если anyPreviousDate на самом деле составляет десять секунд в будущем, тогда ваш код вернет -10.0. Часто случается так, что вы определяете NSDates, которые в какой-то момент в будущем (например, сделать что-то через минуту), так что это совсем не необычно.

1
if([previousDate compare:[NSDate date]] == NSOrderedDescending){ 
    // Previous date is greater than current date.i.e. previous date 
    //is still to come 
    }else{ 
    //Previous date is smaller then current date.i.e. previous date 
    //has passed. 
    } 

метод сравнения объекта NSDate возвращает NSComparisonResult, который является перечислением.

NSComparisonResult имеет следующие значения.

NSOrderedSame возвращается, если левый и правый операнды равны

NSOrderedAscending возвращается, если левый операнд меньше правого операнда

NSOrderedDescending возвращается, если фт операнд больше правого операнда

Смежные вопросы