2012-03-20 32 views
11

Ok, he estado trabajando en esto por un par de días y estoy atascado. Lo que intento hacer es comparar la hora actual con un tiempo predeterminado. Lo que quiero que suceda es que todos los días, en ciertos momentos, deseo que se active cierto código, pero no antes de la hora que especifico.NSDate, comparando dos fechas

por lo que, básicamente, si la "hora actual" es igual o igual a "tiempo predeterminado", luego active este código. O dispara esta línea de código.

Suena simple, pero estoy teniendo problemas para comparar las dos veces.

he formateado una cadena a una fecha como así

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

entonces agarro la hora actual como tal

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

Entonces, ¿cómo puedo comparar estas dos veces? He intentado todo lo que puedo pensar, por favor ayuda.

Respuesta

21

Se puede tratar por debajo de líneas de código?

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

Pero en tu caso creo que hay que tener en ambas fechas mismo formato ..o algo como esto

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

y hacer comparación entre dateOne y dateTwo.

3

Prueba esta condición:

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

     //do want you want 
}