2012-03-20 7 views
11

OK, pracuję nad tym od kilku dni i utknąłem. Próbuję porównać bieżący czas z ustalonym czasem. To, czym chcę się stać, to, że każdego dnia chcę, aby pewien kod został podpalony, ale nie o określonej porze dnia.NSDate, porównując dwie daty

, więc, w zasadzie, jeśli "aktualny czas" jest taki sam lub równy "z góry określony czas", należy zwolnić ten kod. Lub zwolnij ten wiersz kodu.

Brzmi prosto, ale mam problem ze złapaniem porównania dwóch razy.

Mam sformatowany ciąg do daty jak tak

 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); 

potem chwycić aktualny czas podobnie jak

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

Więc jak mam porównać te dwa razy? Próbowałem wszystkiego, co przychodzi mi do głowy, proszę o pomoc.

Odpowiedz

21

można spróbować poniżej linii kodu?

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

Ale w twoim przypadku myślę, że trzeba trzymać obie daty samym formacie ..or niektóre rzeczy jak ten

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]; 

i zrobić porównanie pomiędzy dateOne i dateTwo.

3

Spróbuj warunek:

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

     //do want you want 
}