У меня есть временной интервал, который охватывает годы, и я хочу, чтобы все компоненты времени были от года до секунд.
Моя первая мысль - целочисленное деление временного интервала на секунды в году, вычитание его из текущего количества секунд, деление его на секунды в месяце, вычитание этого значения из промежуточного итога и т. Д.
Это кажется просто запутанным, и я читал, что всякий раз, когда вы делаете что-то, что выглядит запутанным, возможно, существует встроенный метод.
Есть?
Я интегрировал второй метод Алекса в свой код.
Это метод, вызываемый UIDatePicker в моем интерфейсе.
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);
Когда я устанавливаю в пике даты 1 год и 1 день в прошлом, я получаю:
1 год 1 месяц 1 день 16 часов 0
минут 20 секунд
, что составляет 1 месяц и 16 часов. Если в прошлом я выберу дату на 1 день, я останусь на ту же сумму.
Обновление : у меня есть приложение, которое вычисляет ваш возраст в годах, учитывая ваш день рождения (установленный из UIDatePicker), но оно часто было выключено. Это доказывает, что была неточность, но я не могу понять, откуда она, не так ли?