2012-06-13 11 views
16

cosa c'è di sbagliato con questo codice?Aggiungi 90 min 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 

}  

ho bisogno di mostrare questa immagine nella tabella se la partita è in funzione o per 90 min

+0

Qual è 'newDate'? –

risposta

37

Non so che cosa è object che si chiami valueForKey: acceso ma presumendo che restituisca un oggetto NSDate, la chiamata aggiuntiva a description assegnerà un NSString (il valore restituito della descrizione) a matchDateCD. Non è quello che vuoi fare.

Questo è ciò che si vuole fare:

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

Utilizzare il metodo dateByAddingTimeInterval di NSDate per aggiungere il numero di secondi di tempo.

NSDate* newDate = [oldDate dateByAddingTimeInterval:90]; 

è possibile utilizzare uno o NSDateFormatter NSDateComponents per ottenere la nuova ora di nuovo fuori.

1

Le date sono oggetti, quindi non è bene confrontare i puntatori. O convertirli in intervalli di tempo comuni (carri):

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

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

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

Oppure, utilizzare i comparatori:

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

o utilizzare earlierDate: o confrontare:

4

È inoltre impostare l'ora, anni, mesi e secondi ecc

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

Per Swift 4

Per aggiungere 90 minuti a Date uso addingTimeInterval(_:)

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

Per la domanda, rapido codice qui sotto

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") 
    } 
}