iphone objective-c ios xcode nsdate

iphone - Diferencia en horas entre dos NSDate



date formatter swift (3)

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

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);


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

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

Espero que esto te ayudará..



Refiriéndose a esta respuesta de una pregunta mayormente similar, una forma mejor y aprobada por Apple sería usar los métodos de NSCalendar de esta manera:

- (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 se dirige a iOS 8 o posterior, use NSCalendarIdentifierGregorian lugar de NSCalendarIdentifierGregorian en desuso.