My code is here:
func stringFromTimeInterval(interval:NSTimeInterval) -> NSString {
var ti = NSInteger(interval)
var ms = ti * 1000
var secon
Here is slightly improved version of @maslovsa's, with Precision input param:
import Foundation
extension TimeInterval {
enum Precision {
case hours, minutes, seconds, milliseconds
}
func toString(precision: Precision) -> String? {
guard self > 0 && self < Double.infinity else {
assertionFailure("wrong value")
return nil
}
let time = NSInteger(self)
let ms = Int((self.truncatingRemainder(dividingBy: 1)) * 1000)
let seconds = time % 60
let minutes = (time / 60) % 60
let hours = (time / 3600)
switch precision {
case .hours:
return String(format: "%0.2d", hours)
case .minutes:
return String(format: "%0.2d:%0.2d", hours, minutes)
case .seconds:
return String(format: "%0.2d:%0.2d:%0.2d", hours, minutes, seconds)
case .milliseconds:
return String(format: "%0.2d:%0.2d:%0.2d.%0.3d", hours, minutes, seconds, ms)
}
}
}
and usage:
let time: TimeInterval = (60 * 60 * 8) + 60 * 24.18
let hours = time.toString(precision: .hours) // 08
let minutes = time.toString(precision: .minutes) // 08:24
let seconds = time.toString(precision: .seconds) // 08:24:10
let milliseconds = time.toString(precision: .milliseconds) // 08:24:10.799