在 Swift 中为 NSDateComponenstFormatter 设置多个 allowedUnits
Setting multiple allowedUnits for NSDateComponenstFormatter in Swift
背景:
使用 NSDateComponentsFormatter 格式化 NSTimeInterval 时,使用 allowedUnits
属性 将结果字符串四舍五入到相关时间单位通常很方便。
例如,我可能对精确到秒的时间不感兴趣,因此将 allowedUnits
设置为分钟可获得适当舍入的输出字符串:
let duration: NSTimeInterval = 3665.0 // 1 hour, 1 minute and 5 seconds
let durationFormatter = NSDateComponentsFormatter()
durationFormatter.unitsStyle = .Full
durationFormatter.zeroFormattingBehavior = .DropAll
durationFormatter.allowedUnits = .Minute
let formattedDuration = durationFormatter.stringFromTimeInterval(duration)
formattedDuration
将是“61 分钟”。
问题:
您如何将 allowedUnits
设置为 .Hour
和 .Minute
,以便格式化持续时间改为“1 小时 1 分钟”?
NSDateComponentFormatter Class Reference 并没有真正涵盖如何做到这一点。
我提出的解决方案是通过将所需允许单位的原始值相加来创建 NSCalendarUnit
:
durationFormatter.allowedUnits = NSCalendarUnit(rawValue: NSCalendarUnit.Hour.rawValue + NSCalendarUnit.Minute.rawValue)
我不想知道是否有更好的语法或替代方法来执行此操作。
按照 Leo 的建议,您可以简单地在数组中提供 allowedUnits
,如下所示:
durationFormatter.allowedUnits = [.Hour, .Minute]
背景:
使用 NSDateComponentsFormatter 格式化 NSTimeInterval 时,使用 allowedUnits
属性 将结果字符串四舍五入到相关时间单位通常很方便。
例如,我可能对精确到秒的时间不感兴趣,因此将 allowedUnits
设置为分钟可获得适当舍入的输出字符串:
let duration: NSTimeInterval = 3665.0 // 1 hour, 1 minute and 5 seconds
let durationFormatter = NSDateComponentsFormatter()
durationFormatter.unitsStyle = .Full
durationFormatter.zeroFormattingBehavior = .DropAll
durationFormatter.allowedUnits = .Minute
let formattedDuration = durationFormatter.stringFromTimeInterval(duration)
formattedDuration
将是“61 分钟”。
问题:
您如何将 allowedUnits
设置为 .Hour
和 .Minute
,以便格式化持续时间改为“1 小时 1 分钟”?
NSDateComponentFormatter Class Reference 并没有真正涵盖如何做到这一点。
我提出的解决方案是通过将所需允许单位的原始值相加来创建 NSCalendarUnit
:
durationFormatter.allowedUnits = NSCalendarUnit(rawValue: NSCalendarUnit.Hour.rawValue + NSCalendarUnit.Minute.rawValue)
我不想知道是否有更好的语法或替代方法来执行此操作。
按照 Leo 的建议,您可以简单地在数组中提供 allowedUnits
,如下所示:
durationFormatter.allowedUnits = [.Hour, .Minute]