Tengo un intervalo de tiempo que abarca años y quiero componentes todo el tiempo del año a segundos.¿Cómo se descompone un NSTimeInterval en año, meses, días, horas, minutos y segundos en el iPhone?
Mi primer pensamiento es dividir enteros 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 parece enrevesado y he leído que cada vez que haces algo que parece enrevesado, probablemente haya un método incorporado.
¿Lo hay?
Integré 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 me puse el selector de fecha a fecha de 1 año y 1 día en el pasado, me sale:
1 años 1 meses 1 días 16 horas 0 minutos 20 segundos
que tiene 1 mes y 16 horas de descanso. Si configuré el selector de fecha en 1 día en el pasado, estoy fuera de la misma cantidad.
actualización: Tengo una aplicación que calcula su edad en años, dada su cumpleaños (conjunto de una UIDatePicker), sin embargo, a menudo estaba fuera. Esto prueba que hubo una inexactitud, pero no puedo entender de dónde viene, ¿verdad?
Si se establece el selector de fechas con hace un día, estás fuera por un mes y dieciséis horas ? –
sí, un mes y dieciséis horas de descanso. – willc2
Si el resultado es consistentemente un mes y dieciséis horas de descanso, independientemente del valor que elija, o bien resta eso de las variables, con desplazamiento, o necesita evaluar de dónde proviene ese error. Supongo que algo no está bien con tu intervalo, si siempre estás fuera de esa cantidad. –