¿Cómo desgloso un NSTimeInterval en año, meses, días, horas, minutos y segundos en iPhone?

Tengo un intervalo de tiempo que abarca años y quiero todos los componentes de tiempo desde el año hasta segundos.

Mi primer pensamiento es dividir el intervalo de tiempo por segundos en un año, restarlo de un total acumulado de segundos, dividirlo por segundos en un mes, restarlo del total acumulado y así sucesivamente.

Eso simplemente parece complicado y he leído que siempre que esté haciendo algo que parece complicado, probablemente haya un método incorporado.

¿Esta ahí?

He integrado el segundo método de Alex en mi código.

Está en un método llamado por un UIDatePicker en mi interfaz.

NSDate *now = [NSDate date];
NSDate *then = self.datePicker.date;
NSTimeInterval howLong = [now timeIntervalSinceDate:then];

NSDate *date = [NSDate dateWithTimeIntervalSince1970:howLong];
NSString *dateStr = [date description];
const char *dateStrPtr = [dateStr UTF8String];
int year, month, day, hour, minute, sec;

sscanf(dateStrPtr, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &sec);
year -= 1970;

NSLog(@"%d years\n%d months\n%d days\n%d hours\n%d minutes\n%d seconds", year, month, day, hour, minute, sec);

Cuando configuro el selector de fecha en una fecha de 1 año y 1 día en el pasado, obtengo:

1 años 1 meses 1 días 16 horas 0 minutos 20 segundos

que es de 1 mes y 16 horas de descanso. Si configuro el selector de fecha en 1 día en el pasado, me voy por la misma cantidad.

Actualizar: Tengo una aplicación que calcula su edad en años, dado su cumpleaños (conjunto de un UIDatePicker), pero a menudo estaba apagada. Esto prueba que hubo una inexactitud, pero no puedo averiguar de dónde viene, ¿verdad?

Respuestas a la pregunta(9)

Su respuesta a la pregunta