我对 NSDateComponentsFormatter 做错了什么?

Dun*_*n C 1 swift nsdatecomponentsformatter

我最近发现了 iOS8 的新类 NSDateComponentsFormatter,它可以让你格式化时间间隔而不是日期。凉爽的。我编写代码来执行此操作的次数超出了我的想象。所以我决定尝试在操场上使用它,但我无法让它工作。这是我的(Swift)代码:

var componentsFormatter = NSDateComponentsFormatter()
componentsFormatter.allowedUnits =
  .CalendarUnitHour |
  .CalendarUnitMinute |
  .CalendarUnitSecond

componentsFormatter.unitsStyle = .Positional

let interval: NSTimeInterval = 345.7

let intervalstring = componentsFormatter.stringFromTimeInterval(interval)

println("Interval as String = \(intervalstring)")
Run Code Online (Sandbox Code Playgroud)

这显示

字符串形式的间隔 = nil

我尝试过各种各样的事情,但没有快乐。有人有使用这个新类的工作示例吗,或者你能发现我缺少什么吗?

(我也讲 Objective-C,所以如果你有 Objective-C 的示例代码也可以。)

Leo*_*bus 5

斯威夫特 3.1 \xe2\x80\xa2 Xcode 8.3.2

\n\n
extension Formatter {\n    static let dateComponents: DateComponentsFormatter = {\n        let formatter = DateComponentsFormatter()\n        formatter.calendar = Calendar(identifier: .iso8601)\n        formatter.unitsStyle = .full\n        formatter.includesApproximationPhrase = true\n        formatter.includesTimeRemainingPhrase = true\n        formatter.maximumUnitCount = 2\n        formatter.zeroFormattingBehavior = .default\n        formatter.allowsFractionalUnits = false\n        formatter.allowedUnits = [.year, .month, .weekOfMonth, .day, .hour, .minute, .second]\n        return formatter\n    }()\n}\nextension TimeInterval {\n    var remainingTime: String {\n        return Formatter.dateComponents.string(from: self) ?? ""\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n
let interval = 60.0 * 60 * 24 * 7\n\nlet intervalstring = interval.remainingTime   //  "About 1 week remaining"\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

定位时间

\n\n
extension Formatter {\n    static let positional: DateComponentsFormatter = {\n        let formatter = DateComponentsFormatter()\n        formatter.unitsStyle = .positional\n        formatter.zeroFormattingBehavior = .default\n        formatter.allowedUnits = [.hour, .minute, .second]\n        return formatter\n    }()\n\n}\nextension TimeInterval {\n    var hourMinuteSecond: String {\n        return Formatter.positional.string(from: self) ?? ""\n    }\n}\n\nlet time = 345.7\n\nlet positional = time.hourMinuteSecond   // "5:45"\n
Run Code Online (Sandbox Code Playgroud)\n