lanzamiento apple iphone objective-c cocoa-touch ios nsdate

apple - iphone xr



Diferencia entre dos objetos NSDate-Resultado tambiƩn un NSDate (5)

Desde la referencia de clase NSDate , tiene métodos de instancia para hacer esto:

  1. ¿Cómo comparar dos variables de NSDate? Respuesta: isEqualToDate:
  2. ¿Cómo encontrar la diferencia entre dos variables NSDate? Respuesta: timeIntervalSinceDate:
  3. ¿Cómo obtener cada valor separado de minutos, horas y días de la variable NSDate? links

Tengo dos objetos NSDate y quiero la diferencia entre los dos y el resultado debe ser nuevamente un objeto NSDate. ¿Alguna idea de cómo lograr esto?

Aquí, intento abordar un problema único en el que tengo que averiguar el tiempo transcurrido y luego localizar el tiempo transcurrido. Puedo localizarlo si tengo el tiempo transcurrido en el objeto NSDate. Así que pensé en crear un objeto NSDate que tenga su componente de tiempo igual al intervalo de tiempo entre las dos fechas para poder usar NSDateFormatter para localizarlo.


Hay una manera fácil de usar -compare: en NSDate:

NSDate *dateA = [NSDate dateWithTimeIntervalSinceNow:100]; NSDate *dateB = [NSDate dateWithTimeIntervalSinceNow:200]; NSDate *myDate = [NSDate dateWithTimeIntervalSinceNow:150]; NSArray *dateArray = [NSArray arrayWithObjects:dateA, dateB, myDate, nil]; NSArray *sortedArray = [dateArray sortedArrayUsingSelector:@selector(compare:)]; if ([myDate isEqualToDate:[sortedArray objectAtIndex:1]]) NSLog(@"myDatea between dateA and dateB");


Puede calcular el intervalo de tiempo entre dos fechas usando NSDate de timeIntervalSinceDate: pero no tiene sentido que represente un intervalo de tiempo como una fecha.


Si resta 12/12/2001 del 05/05/2002 ¿cuál será la fecha? La distancia cronológica entre dos fechas no puede ser una fecha, siempre es un tipo de intervalo. Puede usar timeIntervalSinceDate: para calcular el intervalo.

Para localizar, puede intentar los siguientes pasos:


NSDate representa una instancia en el tiempo, por lo que no tiene sentido representar un intervalo de tiempo como NSDate . Lo que quieres es NSDateComponents :

NSDate *dateA; NSDate *dateB; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:dateA toDate:dateB options:0]; NSLog(@"Difference in date components: %i/%i/%i", components.day, components.month, components.year);