NSTimeInterval
, как следует из его названия, не означает то же самое, что NSDate
.NSDate
- это момент во времени.Временной интервал - это отрезок времени.Чтобы получить точку из интервала, вам нужно иметь другую точку.Ваш вопрос похож на вопрос "Как мне конвертировать 12 дюймов в место на этой доске, которую я режу?"Ну, 12 дюймов, начиная с , откуда ?
Вам нужно выбрать контрольную дату.Скорее всего, это будет NSDate
, представляющее время, когда вы запустили свой счетчик.Тогда вы можете использовать +[NSDate dateWithTimeInterval:sinceDate:]
или -[NSDate dateByAddingTimeInterval:]
Тем не менее, я уверен, что вы думаете об этом задом наперед.Вы пытаетесь отобразить время, прошедшее с некоторой начальной точки, то есть интервал , а не текущее время.Каждый раз, когда вы обновляете дисплей, вы должны просто использовать новый интервал.Например (при условии, что у вас периодически запускается таймер для обновления):
- (void) updateElapsedTimeDisplay: (NSTimer *)tim {
// You could also have stored the start time using
// CFAbsoluteTimeGetCurrent()
NSTimeInterval elapsedTime = [startDate timeIntervalSinceNow];
// Divide the interval by 3600 and keep the quotient and remainder
div_t h = div(elapsedTime, 3600);
int hours = h.quot;
// Divide the remainder by 60; the quotient is minutes, the remainder
// is seconds.
div_t m = div(h.rem, 60);
int minutes = m.quot;
int seconds = m.rem;
// If you want to get the individual digits of the units, use div again
// with a divisor of 10.
NSLog(@"%d:%d:%d", hours, minutes, seconds);
}