2010-08-03 10 views
5

Ho avviato un NSDate con [Data NSDate]; e voglio verificare se sono trascorse 5 ore da quella variabile NSDate. Come potrei fare per farlo? Quello che ho nel mio codice èCome indicare il numero di ore trascorse da NSDate

requestTime = [[NSDate alloc] init]; 
requestTime = [NSDate date]; 

In un metodo tardi voglio verificare se è stato 12 ore dal requestTime. Per favore aiuto! Grazie in anticipo.

risposta

13
int seconds = -(int)[requestTime timeIntervalSinceNow]; 
int hours = seconds/3600; 

Fondamentalmente qui mi sto chiedendo quanti secondi sono passati da quando siamo arrivati ​​prima il nostro requestTime. Poi con un po 'di magia matematica, alias dividendo per il numero di secondi in un'ora, possiamo ottenere il numero di ore che sono passate.

Una parola di cautela. Assicurati di utilizzare la parola chiave "retain" quando imposti il ​​requesttime. xcode ama dimenticare a quali oggetti NSDate sono impostati senza di esso.

requestTime = [[NSDate date] retain]; 
+5

Utilizzare invece NSDateComponents – cdstamper

13
NSInteger hours = [[[NSCalendar currentCalendar] components:NSHourCalendarUnit fromDate:requestTime toDate:[NSDate date] options:0] hour]; 
if(hours >= 5) 
    // hooray! 
0

Prova con questo metodo, o qualcosa in questo senso.

- (int)hoursSinceDate :(NSDate *)date 
{ 
    #define NUBMER_OF_SECONDS_IN_ONE_HOUR 3600 

    NSDate *currentTime = [NSDate date]; 
    double secondsSinceDate = [currentTime timeIntervalSinceDate:date]; 
    return (int)secondsSinceDate/NUBMER_OF_SECONDS_IN_ONE_HOUR; 
} 

È quindi possibile eseguire una semplice verifica della risposta all'ora intera.

int hours = [dateUtilityClass hoursSinceDate:dateInQuestion]; 
if(hours < 5){ 
    # It has not yet been 5 hours. 
} 
Problemi correlati