У меня есть временной интервал, охватывающий годы, и мне нужны все временные компоненты от года до секунд.
Моя первая мысль состоит в том, чтобы целочисленно разделить временной интервал на секунды в году, вычесть это из общего количества секунд, разделить на секунды в месяце, вычесть это из текущего результата и так далее.
Это кажется запутанным, и я читал, что всякий раз, когда вы делаете что-то, что выглядит запутанным, вероятно, есть встроенный метод.
Есть?
Я интегрировал второй метод Алекса в свой код.
Это в методе, вызываемом 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), но оно часто отключается. Это доказывает, что была неточность, но я не могу понять, откуда она взялась, а вы?