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:
- ¿Cómo comparar dos variables de NSDate? Respuesta:
isEqualToDate:
- ¿Cómo encontrar la diferencia entre dos variables NSDate? Respuesta:
timeIntervalSinceDate:
- ¿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:
Puede usar NSCalendar con dateFromComponents: pasar NSDateComponents .
Para desglosar un timeInterval en NSDateComponents mira ¿Cómo se descompone un NSTimeInterval en año, meses, días, horas, minutos y segundos en iPhone? .
Finalmente use NSDateFormatter e initWithDateFormat:allowNaturalLanguage: para obtener su cadena localizada. La sintaxis de cadenas de formato de fecha muestra los diferentes marcadores de posición.
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);