2012-03-20 15 views
11

Ok, ci sto lavorando da un paio di giorni e sono bloccato. Quello che sto cercando di fare è confrontare l'ora corrente con un tempo predeterminato. Quello che voglio succedere è, ogni giorno, in determinati momenti, voglio che un certo codice si accenda, ma non prima dell'ora del giorno che specifichi.NSDate, confrontando due date

quindi, in pratica se "l'ora corrente" è uguale o uguale a "ora predeterminata", quindi attivare questo codice. O lanciare questa riga di codice.

Sembra semplice, ma ho difficoltà ad afferrare il confronto delle due volte.

ho formattato una stringa in una data in questo modo

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

poi prendo il tempo corrente in questo modo

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

così come faccio a confrontare questi due volte? Ho provato tutto quello che riesco a pensare, per favore aiutatemi.

risposta

21

Puoi provare sotto righe di codice?

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

Ma nel tuo caso credo che è necessario tenere entrambe le date nel medesimo formato ..o qualche cosa come questa

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

e fare il confronto tra dateOne e dateTwo.

3

Prova questa condizione:

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

     //do want you want 
}