2012-06-13 11 views
16

¿Qué hay de malo con este código?Agregue 90 minutos a NSDate

NSDate *matchDateCD = [[object valueForKey:@"matchDate"] description]; // from coredata NSDate 
NSDate *add90Min = [matchDateCD dateByAddingTimeInterval:5400]; 



if (matchDateCD >=[NSDate date] || add90Min <= matchDateCD) 
{ 

    cell.imageView.image = [UIImage imageNamed: @"r.gif"];//Show image in the table 

}  

necesito mostrar esta imagen en la tabla si el partido está en marcha o durante 90 min

+0

¿Cuál es 'newDate'? –

Respuesta

37

No sé lo que es object al que llama al valueForKey:, pero suponiendo que devuelve un objeto NSDate, su llamada adicional al description asignará un NSString (el valor de retorno de la descripción) al matchDateCD. Eso no es lo que quieres hacer.

Esto es lo que quiere hacer:

NSDate *matchDateCD = [object valueForKey:@"matchDate"]; 
NSDate *add90Min = [matchDateCD dateByAddingTimeInterval:(90*60)]; // compiler will precompute this to be 5400, but indicating the breakdown is clearer 

if ([matchDateCD earlierDate:[NSDate date]] != matchDateCD || 
    [add90Min laterDate:matchDateCD] == add90Min) 
{ 
    cell.imageView.image = [UIImage imageNamed: @"r.gif"];//Show image in the table 
} 
6

Uso del método de dateByAddingTimeInterval NSDate a sumar el número de segundos a la vez.

NSDate* newDate = [oldDate dateByAddingTimeInterval:90]; 

continuación, puede utilizar cualquiera NSDateFormatter o NSDateComponents para obtener el nuevo tiempo de volver a salir.

1

Las fechas son objetos, por lo que no es bueno comparar los punteros. O bien convertirlos a intervalos de tiempo comunes (flotadores):

NSDate *now = [NSDate date]; 
NSDate *tenMinsLater = [now dateByAddingTimeInterval:600]; 

NSTimeInterval nowInterval = [now timeIntervalSinceReferenceDate]; 
NSTimeInterval *tenMinsLaterInterval = [tenMinsLater timeIntervalSinceReferenceDate]; 

if (nowInterval > tenMinsLaterInterval) NSLog(@"never get here"); 

O bien, utilizar los comparadores:

// also false under newtonian conditions 
if (now > [now laterDate:tenMinsLater]) NSLog(@"einstein was right!"); 

o utilizar earlierDate: o comparar:

4

También para fijar la hora, años, meses y segundos etc

 NSDateComponents *components= [[NSDateComponents alloc] init]; 
    [components setMinute:30]; 
    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSDate *myNewDate=[calendar dateByAddingComponents:components toDate:[NSDate date] options:0]; 
1

Para Swift 4

Para añadir 90 mins Date a utilizar addingTimeInterval(_:)

let now = Date() 
let minutes: Double = 90 
let add90MinsDate = now.addingTimeInterval(minutes * 60) 

Para la pregunta, código SWIFT continuación

if let matchDateCD: Date = objest.value(forKey: "matchDate") as? Date { 
    let add90Min = matchDateCD.addingTimeInterval(90 * 60) 
    if matchDateCD >= Date() || add90Min > matchDateCD { 
     cell.imageView.image = UIImage(named: "r.gif") 
    } 
}