mjo*_*oe7 25 nstimer ios swift
我有一个NSTimer,它从2小时到0都是DOWN.
以下是我的一些代码:
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))
}
Run Code Online (Sandbox Code Playgroud)
计时器标签是:
TimerLabel.text = "Time: \(timeString(timeCount))"
Run Code Online (Sandbox Code Playgroud)
但是,我的计时器标签显示为:
Time: 200:59.0
Run Code Online (Sandbox Code Playgroud)
如何将我的计时器标签格式化为:
Time: 01:59:59 // (which is hours:minutes:seconds)?
Run Code Online (Sandbox Code Playgroud)
[请注意我的倒数计时器没有问题,我只需要知道如何使用TimeString函数更改时间格式.]
编辑:有人提到我的问题可能是这个问题的副本:Swift - iOS - 日期和时间不同的格式.但是,我问我如何使用上面给出的TimeString函数更改时间格式.我不是要求另外一种方法来做到这一点.
例如:
let minutes = Int(time) / 60
Run Code Online (Sandbox Code Playgroud)
给了我"200"分钟.等等
rma*_*ddy 82
你的计算都错了.
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)
Run Code Online (Sandbox Code Playgroud)
Mar*_*man 45
@ 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)
Run Code Online (Sandbox Code Playgroud)
小智 7
斯威夫特5
var totalSecond = Int()
var timer:Timer?
Run Code Online (Sandbox Code Playgroud)
根据要求调用 startTimer() -
func startTimer(){
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countdown), userInfo: nil, repeats: true)
}
@objc func countdown() {
var hours: Int
var minutes: Int
var seconds: Int
if totalSecond == 0 {
timer?.invalidate()
}
totalSecond = totalSecond - 1
hours = totalSecond / 3600
minutes = (totalSecond % 3600) / 60
seconds = (totalSecond % 3600) % 60
timeLabel.text = String(format: "%02d:%02d:%02d", hours, minutes, seconds)
}
Run Code Online (Sandbox Code Playgroud)
完毕
归档时间: |
|
查看次数: |
23607 次 |
最近记录: |