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