2012-04-25 15 views
26

Aquí estoy tratando de calcular las horas entre dos fechas. Cuando ejecuto la aplicación, falla. ¿Podría decirme el error en este código?Diferencia en horas entre dos NSDate

NSString *lastViewedString = @"2012-04-25 06:13:21 +0000"; 
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"]; 

NSDate *lastViewed = [[dateFormatter dateFromString:lastViewedString] retain]; 
NSDate *now = [NSDate date]; 

NSLog(@"lastViewed: %@", lastViewed); //2012-04-25 06:13:21 +0000 
NSLog(@"now: %@", now); //2012-04-25 07:00:30 +0000 

NSTimeInterval distanceBetweenDates = [now timeIntervalSinceDate:lastViewed]; 
double secondsInAnHour = 3600; 
NSInteger hoursBetweenDates = distanceBetweenDates/secondsInAnHour; 

NSLog(@"hoursBetweenDates: %@", hoursBetweenDates); 
+3

NSLog (@ "hoursBetweenDates:% d", hoursBetweenDates); – adali

+1

No tiene sentido incorporar cambios que resuelvan su problema en el código de la pregunta. Después de esa edición, su código ya no se bloqueaba, así que hice una reversión a la versión original de la pregunta. –

+0

Active las advertencias en su compilador. Hay un error grave, y con las advertencias activadas, el compilador se lo habría contado. – gnasher729

Respuesta

11

Creo que la diferencia debe estar en valor int ...

NSLog(@"hoursBetweenDates: %d", hoursBetweenDates); 

Esperanza, esto le ayudará a ..

+0

sí, tienes razón, gracias Nit – shebi

11

Refiriéndose a this answer of a mostly similar question una mejor y Apple aprobado manera estaría utilizando los métodos NSCalendar como este:

- (NSInteger)hoursBetween:(NSDate *)firstDate and:(NSDate *)secondDate { 
    NSUInteger unitFlags = NSCalendarUnitHour; 
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components = [calendar components:unitFlags fromDate:firstDate toDate:secondDate options:0]; 
    return [components hour]+1; 
} 

Si el público iOS 8 o posterior usa NSCalendarIdentifierGregorian en lugar del NSGregorianCalendar obsoleto.