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á..
NSInteger no se puede mostrar usando
NSLog(@"%@", hoursBetweenDates);
en su lugar utiliza:
NSLog(@"%d", hoursBetweenDates);
Si no está seguro de qué utilizar, consulte los documentos para desarrolladores de Apple: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265
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.