2015-12-17 55 views
-1

我正在创建一个倒数计时器,显示小时:分钟:秒。如何格式化数字以便始终有两位数字?

我的作品不过,功能,如果该数字小于10返回值1位(前2:3:15)

我如何格式化我的功能,以始终两位数字?

我正在寻找像一个结果:2时03分15秒

func secondsToHoursMinutesSeconds (seconds : Int) -> (Int, Int, Int) { 
     return (seconds/3600, (seconds % 3600)/60, (seconds % 3600) % 60) 
    } 
+1

谢谢您发现解决方案 – SNos

+0

使用'“%02d:%02d:%02d”'作为格式化程序。 – holex

回答

0

或者使用DateComponentsFormatter

lazy var dateComponentsFormatter: DateComponentsFormatter = { 
    let formatter = DateComponentsFormatter() 
    formatter.zeroFormattingBehavior = .pad 
    formatter.allowedUnits = [.hour, .minute, .second] 
    return formatter 
}() 

func secondsToHoursMinutesSeconds(seconds: Int) -> String { 
    let hourPad = seconds < 36000 ? "0" : "" // add 0 in front if less than 10 hours 
    return hourPad + dateComponentsFormatter.string(from: seconds)! 
} 

secondsToHoursMinutesSeconds(3602) // 01:00:02 

由于DateComponentsFormatter并不会自动垫小时zeroFormattingBehavior = .pad,你必须添加“手动”。
格式化程序本身被声明为延迟计算属性以避免重复实例化。

+0

非常感谢。更好的方法和干净的代码 – SNos

相关问题