2009-03-17 11 views
13

ho due timevalues ​​nel formato:% H% M% S (E.G.161500)Calcolare differenza di tempo a Cocoa

Questi valori sono numeri interi basati su testo.

Esiste una semplice funzione in Cocoa che calcola la differenza tra questi due numeri interi utilizzando una scala di 60 secondi e minuti?

Quindi, se

time 1 = 161500 
time 2 = 171500 

timedifference = 003000 

risposta

33
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"HHmmss"]; 

NSDate *date1 = [dateFormatter dateFromString:@"161500"]; 
NSDate *date2 = [dateFormatter dateFromString:@"171500"]; 

NSTimeInterval diff = [date2 timeIntervalSinceDate:date1]; // diff = 3600.0 
10

La classe per le date che manipolano è NSDate. Il metodo per ottenere intervalli di tempo è -timeIntervalSinceDate:. Il risultato è un valore NSTimeInterval, che è un double che rappresenta l'intervallo in secondi.

È possibile creare un oggetto NSDate da un NSString con +dateWithString:, a condizione che la data è formattato come 2001-03-24 10:45:32 +0600.

+1

E se non lo è, è possibile creare un'istanza di un NSDateFormatter con la stringa di formato necessario. –

+0

Questo è utile. Grazie. – Jirapong

1

Vorrei creare una sottoclasse NSFormatter per analizzare i valori temporali in quel formato dai dati di input (è possibile inserirne uno in un campo di testo per convertire automaticamente l'input dell'utente o utilizzarlo per analizzare da un'origine dati nel codice). Avere restituire il numero combinato di secondi come un NSTimeInterval (doppio rappresentante secondi) avvolto in un NSNumber. Da lì è facile sottrarre la differenza e visualizzarla utilizzando la stessa classe NSFormatter che hai creato. In entrambi i valori di analisi e visualizzazione, sei l'unico responsabile per scrivere la conversione del codice da secondi a ore: minuti: secondi o qualsiasi formato desideri. Puoi anche convertire questi valori in un NSDate come mouviciel menzionato, se ha senso per la tua applicazione. Tieni a mente che memorizzerai sempre la differenza di fuso orario rispetto a una data di riferimento, di solito il 1 ° gennaio 1970 (NSDate ha metodi per farlo per te).

4

provare questo codice.

- (NSTimeInterval)intervalBetweenDate:(NSDate *)dt1 andDate:(NSDate *)dt2 { 

NSTimeInterval interval = [dt2 timeIntervalSinceDate:dt1]; 
NSLog(@"%f",interval); 
return interval; 

}

Problemi correlati