我有一个时间间隔,比如12600,相当于3小时30分钟.我如何格式化任何这样的时间间隔,以便只保留间隔的最高部分(例如在这种情况下图中,小时),并将正确的区域设置缩写附加到数字上.例如10米(10分钟),3d(3天),1年(1年).
编辑:以下是一些例子:
Time interval in: 90000 Whole string: 1d String out: 1d Time interval in: 900 Whole string: 15m String out: 15m Time interval in: 13500 Whole String: 3h 45m String out: 4h
作为一般规则,应用正常的舍入规则(向下舍入3.4轮,向上舍入3.6轮).
Cod*_*ent 50
使用DateComponentFormatter,自iOS 8起可用:
func format(duration: TimeInterval) -> String {
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.day, .hour, .minute, .second]
formatter.unitsStyle = .abbreviated
formatter.maximumUnitCount = 1
return formatter.string(from: duration)!
}
for d in [12600.0, 90000.0, 900.0, 13500.0] {
let str = format(duration: d)
print("\(d): \(str)")
}
Run Code Online (Sandbox Code Playgroud)
这打印:
12600.0: 4h
90000.0: 1d
900.0: 15m
13500.0: 4h
Run Code Online (Sandbox Code Playgroud)
Rom*_*zak 13
Swift 3扩展:
extension TimeInterval {
func format() -> String? {
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.day, .hour, .minute, .second, .nanosecond]
formatter.unitsStyle = .abbreviated
formatter.maximumUnitCount = 1
return formatter.string(from: self)
}
}
Run Code Online (Sandbox Code Playgroud)
以防万一有人想要。.Swift 4
extension TimeInterval {
func format(using units: NSCalendar.Unit) -> String? {
let formatter = DateComponentsFormatter()
formatter.allowedUnits = units
formatter.unitsStyle = .abbreviated
formatter.zeroFormattingBehavior = .pad
return formatter.string(from: self)
}
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
let value:TimeInterval = 12600.0
print("\(value.format(using: [.hour, .minute, .second])!)")
Run Code Online (Sandbox Code Playgroud)
结果将是:
3h 30m 0s
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9636 次 |
| 最近记录: |