Сравнивая две даты с nsdate - PullRequest
       1

Сравнивая две даты с nsdate

0 голосов
/ 26 октября 2011

В моем приложении мне приходится сравнивать два раза: текущий (то есть 12:44) и данные, которые я пробовал:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"hh:mm"];
NSDate *neededDate = [[NSDate alloc] init];
neededDate = [dateFormatter dateFromString:@"14:45"];
if ([neededDate compare:[NSDate date]] == NSOrderedAscending) {
NSLog(@"yes");
} else NSLog(@"no");
[neededDate release];
[dateFormatter release];

Но каждый раз, когда я запускаю его, NSLog говорит «нет».Пожалуйста, подскажите, где я не прав.Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 26 октября 2011

Потому что ваш neededDate будет равен "1970/01/01 14:45".

Вам необходимо установить правильный год и дату.

Вы можете получить текущий год, месяц и сказать, например, используя следующий подход:

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:[NSDate date]];
NSLog(@"Current year: %d", components.year);
NSLog(@"Current month: %d", components.month);
NSLog(@"Current day: %d", components.day);
0 голосов
/ 26 октября 2011

это означает, что в вашем случае requiredDate всегда выше текущей даты. это, вероятно, потому что вы храните 48-часовую строку в 24-часовом формате. изменить строку на ЧЧ: мм

также, проверьте значение, которое вы храните в нужной дате.

вот небольшой пример

NSDate *neededDate = [[NSDate date] dateByAddingTimeInterval:5];
    if ([neededDate compare:[NSDate date]] == NSOrderedAscending) {
        NSLog(@"asc");
    } else {
        NSLog(@"dec");
    }

в этом случае будет напечатано dec.

0 голосов
/ 26 октября 2011

Я думаю, что проблема здесь:

[dateFormatter setDateFormat:@"hh:mm"];

должно быть:

[dateFormatter setDateFormat:@"HH:mm"];

потому что теперь для «14:45» он возвращает (нулевую) дату

(это дополнительно к предыдущему ответу:)

...