Swift: 根据秒数格式化时间字符串
Swift: Formatting time string based on number of seconds
我的应用程序中有一个 NSTimer 对象,它以秒为单位计算经过的时间。
我想在我的应用程序界面中以符合众所周知的标准的方式格式化 UILabel。
例子
00:01 - 一秒
01:00 - 60 秒
01:50:50 - 6650 秒
我想知道如何做到这一点,你知道任何 pods/libraries 可以根据 Int 秒数创建这样的字符串吗?
显然我可以自己想出一个复杂的方法,但由于建议不要重新发明轮子,我更愿意使用一些现成的解决方案。
我没有在 Foundation 库和 HealthKit 中找到任何相关内容
您对如何完成它有什么建议吗?如果您说 "go and write it yourself" - 没关系。但我想确保我没有遗漏任何简单、直接的解决方案。
提前致谢
根据this答案想出来的,很简单!
func createTimeString(seconds: Int)->String
{
var h:Int = seconds / 3600
var m:Int = (seconds/60) % 60
var s:Int = seconds % 60
let a = String(format: "%u:%02u:%02u", h,m,s)
return a
}
(NS)DateComponentsFormatter
可以做到:
func timeStringFor(seconds : Int) -> String
{
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.second, .minute, .hour]
formatter.zeroFormattingBehavior = .pad
let output = formatter.string(from: TimeInterval(seconds))!
return seconds < 3600 ? output.substring(from: output.range(of: ":")!.upperBound) : output
}
print(timeStringFor(seconds:1)) // 00:01
print(timeStringFor(seconds:60)) // 01:00
print(timeStringFor(seconds:6650)) // 1:50:50
我的应用程序中有一个 NSTimer 对象,它以秒为单位计算经过的时间。
我想在我的应用程序界面中以符合众所周知的标准的方式格式化 UILabel。
例子
00:01 - 一秒
01:00 - 60 秒
01:50:50 - 6650 秒
我想知道如何做到这一点,你知道任何 pods/libraries 可以根据 Int 秒数创建这样的字符串吗?
显然我可以自己想出一个复杂的方法,但由于建议不要重新发明轮子,我更愿意使用一些现成的解决方案。
我没有在 Foundation 库和 HealthKit 中找到任何相关内容
您对如何完成它有什么建议吗?如果您说 "go and write it yourself" - 没关系。但我想确保我没有遗漏任何简单、直接的解决方案。
提前致谢
根据this答案想出来的,很简单!
func createTimeString(seconds: Int)->String
{
var h:Int = seconds / 3600
var m:Int = (seconds/60) % 60
var s:Int = seconds % 60
let a = String(format: "%u:%02u:%02u", h,m,s)
return a
}
(NS)DateComponentsFormatter
可以做到:
func timeStringFor(seconds : Int) -> String
{
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.second, .minute, .hour]
formatter.zeroFormattingBehavior = .pad
let output = formatter.string(from: TimeInterval(seconds))!
return seconds < 3600 ? output.substring(from: output.range(of: ":")!.upperBound) : output
}
print(timeStringFor(seconds:1)) // 00:01
print(timeStringFor(seconds:60)) // 01:00
print(timeStringFor(seconds:6650)) // 1:50:50