NSDate, сравнивая две даты

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

поэтому, в основном, если "текущее время" совпадает или равно "заданному времени", тогда запустите этот код. Или запустите эту строку кода.

Звучит просто, но мне сложно схватить сравнение двух раз.

Я отформатировал строку до такой даты

     NSString* dateString = @"11:05 PM";
        NSDateFormatter* firstDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
        [firstDateFormatter setDateFormat:@"h:mm a"];
        [firstDateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
        NSDate* date = [firstDateFormatter dateFromString:dateString];
        NSLog(@"date %@",date);

тогда я хватаю текущее время так

   NSDate *currentTime = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone localTimeZone]     secondsFromGMT]];
NSDateComponents* comps = [[NSCalendar currentCalendar] 
                           components: NSHourCalendarUnit |NSMinuteCalendarUnit 
                                |NSSecondCalendarUnit fromDate:currentTime];
 [[NSCalendar currentCalendar] dateFromComponents:comps];

SO, как я могу сравнить эти два раза? Я пробовал все, о чем я могу думать, пожалуйста, помогите.

Ответ 1

Можете ли вы попробовать строки ниже?

switch ([dateOne compare:dateTwo]){
     case NSOrderedAscending:
          NSLog(@"NSOrderedAscending");
    break;
    case NSOrderedSame:
          NSLog(@"NSOrderedSame");
    break;
    case NSOrderedDescending:
         NSLog(@"NSOrderedDescending");
    break;
}

Но в вашем случае я думаю, вам нужно сохранить обе даты в одном формате.. или что-то вроде этого

 NSDateComponents *components = [[NSCalendar currentCalendar] components:NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:[NSDate date]];
    [components setHour:23];//change your time to 24hrs formate 
    [components setMinute:05];
    [components setSecond:00];


    NSDate *dateOne = [[NSCalendar currentCalendar] dateFromComponents:components];

    components = [[NSCalendar currentCalendar] components:NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:[NSDate date]];

     NSDate *dateTwo = [[NSCalendar currentCalendar] dateFromComponents:components];

и выполняйте сравнение между dateOne и dateTwo.

Ответ 2

Попробуйте следующее условие:

if ([date compare:currentTime]==NSOrderedSame) {

         //do want you want
}

Ответ 3

Предполагая, что ваша проблема фактически сравнивает два объекта NSDate, попробуйте проверить вопрос, связанный ниже; у него есть несколько хороших указателей;

Как сравнить две даты в Objective-C