Не могу сравнить два NSDates - PullRequest
0 голосов
/ 27 марта 2012

Запутался здесь ... У меня есть две даты, которые я NSLog, чтобы утешить и получить: даты 2011-03-30 13:33:57 +0000 - 2011-03-28 13:33:57 +0000

Одна дата явно позже, чем другая ... Однако, в коде ниже это неНеважно, если я использую [dateUSERPREFS laterDate:dateXML] или [dateUSERPREFS earlierDate:dateXML] Я получаю «мы получаем первый IF», отображаемый в консоли?

Есть идеи?Спасибо,

NSDate *dateXML = [df dateFromString:last_modifiedXML];
NSDate *dateUSERPREFS = [df dateFromString:last_modifiedUSERPREFS];

NSLog(@"dates are %@ - %@", dateXML, dateUSERPREFS);

if ([dateUSERPREFS laterDate:dateXML]) {        
    NSLog(@"we get first IF");
}

Ответы [ 3 ]

12 голосов
/ 27 марта 2012

[aDate laterDate:anotherDate] возвращает NSDate, а не BOOL.В частности, он возвращает более позднюю из двух дат.

Вы хотите использовать compare: вместо:

NSComparisonResult comparisonResult = [dateUSERPREFS compare:dateXML];
if (comparisonResult == NSOrderedAscending) {
    // case where dateUSERPREFS is before dateXML
} else if (comparisonResult == NSOrderedSame) {
    // both dates are the same
} else if (comparisonResult == NSOrderedDescending) {
    // this could have just been a plain else; dateUSERPrefs after dateXML
}

В качестве альтернативы, вы можете использовать [dateUSERPREFS timeIntervalSinceDate:dateXML], что дает вам (подписано)количество секунд от dateXML до dateUSERPREFS.

2 голосов
/ 27 марта 2012

В документации Apple говорится, что LaterDate возвращает более позднюю из двух дат, а не оператор BOOL.

Я бы сделал следующее: вычтите одну дату из другой и проверите, больше или меньше это значение. Это скажет вам, что больше:

if ([dateXML timeIntervalSinceDate:dateUSERPREFS] > 0) {
    //Now you know that dateXML is larger than dateUSERPREFS
}
1 голос
/ 27 марта 2012

-[NSDate laterDate:] возвращает NSDate *, а не BOOL, и это не будет Null, поэтому условие всегда будет истинным.

Попробуйте -[NSDate compare:] с подписью:

- (NSComparisonResult)compare:(NSDate *)anotherDate

Затем вы можете сравнить NSComparisonResult в вашем if состоянии, и я верю, что вы пытаетесь достичь с помощью кода в вашем вопросе.

(Конечно, вы можете продолжать использовать laterDate: и просто сравнить равенство с исходным объектом, но я чувствую, что compare: делает для более интуитивной логики)

...