我对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)")

显示

Interval为String = nil

我尝试了各种各样的东西,但没有乐趣。有没有人有一个使用这个新类的工作示例,或者你能指出我错过了什么?

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

3.1•斯威夫特Xcode 8.3.2

extension Formatter {
    static let dateComponents: DateComponentsFormatter = {
        let formatter = DateComponentsFormatter()
        formatter.calendar = Calendar(identifier: .iso8601)
        formatter.unitsStyle = .full
        formatter.includesApproximationPhrase = true
        formatter.includesTimeRemainingPhrase = true
        formatter.maximumUnitCount = 2
        formatter.zeroFormattingBehavior = .default
        formatter.allowsFractionalUnits = false
        formatter.allowedUnits = [.year, .month, .weekOfMonth, .day, .hour, .minute, .second]
        return formatter
    }()
}
extension TimeInterval {
    var remainingTime: String {
        return Formatter.dateComponents.string(from: self) ?? ""
    }
}

let interval = 60.0 * 60 * 24 * 7
let intervalstring = interval.remainingTime   //  "About 1 week remaining"

位置时间

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

最新更新