Ответ 1
Ваши расчеты ошибочны.
let hours = Int(time) / 3600
let minutes = Int(time) / 60 % 60
let seconds = Int(time) % 60
return String(format:"%02i:%02i:%02i", hours, minutes, seconds)
У меня есть NSTimer, который рассчитывает DOWN от 2 часов до 0.
Вот некоторые из моего кода:
var timer = NSTimer()
let timeInterval:NSTimeInterval = 0.5
let timerEnd:NSTimeInterval = 0.0
var timeCount:NSTimeInterval = 7200.0 // seconds or 2 hours
// TimeString Function
func timeString(time:NSTimeInterval) -> String {
let minutes = Int(time) / 60
let seconds = time - Double(minutes) * 60
let secondsFraction = seconds - Double(Int(seconds))
return String(format:"%02i:%02i.%01i",minutes,Int(seconds),Int(secondsFraction * 10.0))
}
Метка таймера:
TimerLabel.text = "Time: \(timeString(timeCount))"
ОДНАКО, моя метка таймера показывает как:
Time: 200:59.0
Как мне отформатировать ярлык таймера, чтобы выглядеть так:
Time: 01:59:59 // (which is hours:minutes:seconds)?
[Обратите внимание, что у меня нет проблем с таймером обратного отсчета, мне нужно только знать, как ИЗМЕНИТЬ ФОРМАТ ВРЕМЕНИ, используя функцию TimeString.]
EDIT: Кто-то упомянул, что мой вопрос - это возможный дубликат этого: Swift - iOS - Даты и время в другом формате. ОДНАКО, я спрашиваю, как изменить формат времени с помощью функции TimeString, которую я дал выше. Я не прошу другого способа как это сделать.
Например:
let minutes = Int(time) / 60
дает мне "200" минут. и др.
Ваши расчеты ошибочны.
let hours = Int(time) / 3600
let minutes = Int(time) / 60 % 60
let seconds = Int(time) % 60
return String(format:"%02i:%02i:%02i", hours, minutes, seconds)
@rmaddy является точным и отвечает на вопрос. Однако ни вопрос, ни решение не учитывают международных пользователей. Я предлагаю использовать DateComponentsFormatter
и позволить структуре обрабатывать вычисления и форматирование. Это делает ваш код менее подверженным ошибкам и более надежным будущим.
Я наткнулся на это сообщение в блоге, которое обеспечивает краткое решение: http://crunchybagel.com/formatting-a-duration-with-nsdatecomponentsformatter/
В результате этого сообщения это фрагмент кода, который заменит используемый вами код для выполнения ваших расчетов. Обновлено для Swift 3:
let duration: TimeInterval = 7200.0
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .positional // Use the appropriate positioning for the current locale
formatter.allowedUnits = [ .hour, .minute, .second ] // Units to display in the formatted string
formatter.zeroFormattingBehavior = [ .pad ] // Pad with zeroes where appropriate for the locale
let formattedDuration = formatter.string(from: duration)