我在数组中有一些文本字段。 HH:MM:SS。我有两个问题,一个是当其中一个字段留空时,应用程序崩溃,我希望它在空白时读为“ 0”。其次,我在下面使用将HH:MM:SS转换为Minutes。我做0:18:30,下面到小数的数学结果为18.5
现在如何将其转换回HH:MM:SS? array[0]
是小时,array[1]
是分钟,array[2]
是秒。
stepOne = (Float(array[0])! * 60) + Float(array[1])! + (Float(array[2])! / 60)
您需要计算秒数而不是分钟数。使用reduce方法,只需将第一个元素乘以3600,然后在每次迭代后将乘数除以60。接下来,您可以使用DateComponentsFormatter
使用.positional
单位样式向用户显示最终的秒时间间隔:
let array = [0,18,30]
var n = 3600
let seconds = array.reduce(0) {
defer { n /= 60 }
return $0 + $1 * n
}
let dcf = DateComponentsFormatter()
dcf.allowedUnits = [.hour, .minute, .second]
dcf.unitsStyle = .positional
dcf.zeroFormattingBehavior = .pad
let string = dcf.string(from: TimeInterval(seconds)) // "00:18:30"