Swift timeInterval格式化程序

Nrc*_*Nrc 4 macos date swift

我可以在日期选择器中获取日期,计算剩余时间并放入标签中。这给出了几秒钟:

let timeLeft = datePicker.dateValue.timeIntervalSinceNow
countingLabel.stringValue = "seconds left: \(timeLeft)"
Run Code Online (Sandbox Code Playgroud)

如何格式化“ timeLeft”?

I tried this and it does not work:
var formatter = NSDateFormatter()
formatter.dateFormat = "EEEE, yyyy-MM-dd hh:mm:ss"
let timeLeft2 = formatter.stringFromDate(timeLeft)
Run Code Online (Sandbox Code Playgroud)

Mar*_*n R 8

您可以使用NSDateComponentsFormatter。从文档中:

一个NSDateComponentsFormatter对象需要花费大量时间,并将它们格式化为用户可读的字符串。使用日期组件格式化程序为您的应用程序界面创建字符串。

例:

let formatter = NSDateComponentsFormatter()
formatter.unitsStyle = .Full
formatter.allowedUnits = .CalendarUnitSecond | .CalendarUnitMinute | .CalendarUnitHour

let pickedDate = datePicker.dateValue
let now = NSDate()
let formattedTimeLeft = formatter.stringFromDate(now, toDate: pickedDate)!

// Example result : 1:06:50
Run Code Online (Sandbox Code Playgroud)

还有更多可用的输出格式,例如

.Abbreviated :  1h 6m 50s
.Short :        1 hr, 6 min, 50 secs
.Full :         1 hour, 6 minutes and 50 seconds
Run Code Online (Sandbox Code Playgroud)