У меня есть некоторое количество этого seconds
, полученного с определенного события. Он хранится в NSTimeInterval
типе данных.
Я хочу преобразовать его в minutes
и seconds
.
Например, у меня есть: «326,4 секунды», и я хочу преобразовать его в следующую строку: «5:26».
Как лучше всего достичь этой цели?
Спасибо.
objective-c
iphone
nstimeinterval
seconds
minute
Илья Суздальницкий
источник
источник
Краткое описание
Используйте метод NSCalendar:
(NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
«Возвращает в виде объекта NSDateComponents с использованием указанных компонентов разницу между двумя предоставленными датами». Из документации API.
Создайте 2 NSDate, отличием которых является NSTimeInterval, который вы хотите преобразовать. (Если ваш NSTimeInterval получен из сравнения 2 NSDate, вам не нужно делать этот шаг, и вам даже не нужен NSTimeInterval).
Получите ваши котировки от NSDateComponents
Образец кода
Известные проблемы
источник
%ld
если вы находитесь на 64-битной машине.Все это выглядит сложнее, чем должно быть! Вот короткий и удобный способ преобразовать временной интервал в часы, минуты и секунды:
Обратите внимание, когда вы помещаете float в int, вы автоматически получаете floor (), но вы можете добавить его к первым двум, если вам станет лучше :-)
источник
Простите меня за то, что я девственница Стэка ... Я не знаю, как ответить на ответ Брайана Рамзи ...
Использование раунда не работает для вторых значений от 59,5 до 59,99999. Второе значение в этот период будет 60. Вместо этого используйте trunc ...
источник
Если вы ориентируетесь на iOS 8 или OS X 10.10 или выше, это стало намного проще. Новый
NSDateComponentsFormatter
класс позволяет вам преобразовать данноеNSTimeInterval
значение из его значения за секунды в локализованную строку, чтобы показать пользователю. Например:Цель-C
Swift
NSDateCompnentsFormatter
также позволяет использовать этот вывод в более длинных формах. Более подробную информацию можно найти в статье NSHipster NSFormatter . И в зависимости от того, с какими классами вы уже работаете (если нетNSTimeInterval
), может быть удобнее передать форматеру экземплярNSDateComponents
или дваNSDate
объекта, что также можно сделать с помощью следующих методов.Цель-C
Swift
источник
switch
илиif else
заявления с этим.NSDateComponentsFormatter
обо всем позаботится. Часы, минуты, секунды напечатаны без каких-либо проблем.Код Брайана Рамзи, де-псевдоним:
источник
Вот версия Swift:
Можно использовать так:
источник
Выходы:
источник
Поскольку это по сути двойная ...
Разделите на 60,0 и извлеките целую часть и дробную часть.
Неотъемлемой частью будет целое количество минут.
Снова умножьте дробную часть на 60,0.
Результатом будут оставшиеся секунды.
источник
Помните, что исходный вопрос касается вывода строки, а не псевдокода или отдельных строковых компонентов.
Во многих ответах отсутствуют вопросы интернационализации, и большинство из них выполняет математические вычисления вручную. Все просто так 20 век ...
Не занимайтесь математикой самостоятельно (Swift 4)
Использование библиотек
Если вам действительно нужны отдельные компоненты и приятный для чтения код, посмотрите SwiftDate :
Кредиты @mickmaccallum и @polarwar за адекватное использование
DateComponentsFormatter
источник
Как я сделал это в Swift (включая форматирование строки, чтобы она отображалась как «01:23»):
источник
Версия Swift 2
источник