У меня есть несколько NSTimeInterval
, полученных из предыдущих вычислений для различных NSDate
. Теперь я хочу отобразить эти интервалы пользователю в формате days:hours:minutes:seconds
.
Ранее в своем приложении я использовал этот код для отображения информации в немного другом контексте:
-(void)updateDurationLabel
{
//Which calendar
NSCalendar *calendar = [NSCalendar currentCalendar];
//Gets the componentized interval from the most recent time an activity was tapped until now
NSDateComponents *components= [calendar components:NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit fromDate:self.startTime toDate:[NSDate date] options:0];
NSInteger days = [components day];
NSInteger hours = [components hour];
NSInteger minutes = [components minute];
NSInteger seconds =[components second];
// Converts the components to a string and displays it in the duration label, updated via the timer
cellLabelTempText = [NSString stringWithFormat:@"%02i:%02i:%02i:%02i",days,hours,minutes,seconds];
self.durationOrSleepLabel.text = cellLabelTempText;
}
Однако в данном случае я бы хотел, чтобы нужный NSString
производился с использованием различных уже полученных NSTimeInterval
для использования в нескольких разных метках, которые создаются на лету.
Вопрос:
Есть ли какой-нибудь способ напрямую перейти к NSString
из существующего NSTimeInterval
, т. е. без прохождения через fromDate/toDate
канитель?
Спасибо!
Обновление:
В соответствии с ответом @Rich ниже я добавил этот метод, который обошел математику:
-(void) focusItemDurationCalculator
{
NSInteger days = ((NSInteger) focusItemDuration) / (60 * 60 * 24);
NSInteger hours = (((NSInteger) focusItemDuration) / (60 * 60)) - (days * 24);
NSInteger minutes = (((NSInteger) focusItemDuration) / 60) - (days * 24 * 60) - (hours * 60);
NSInteger seconds = ((NSInteger) round(focusItemDuration)) % 60;
actualDurationFocusItem = [NSString stringWithFormat:@"%02i:%02i:%02i:%02i",days,hours,minutes,seconds];
}
Работает отлично!