我正在嘗試使用NSDateComponentsFormatter
來生成用戶可讀的持續時間字符串。雖然它通常工作得很好,有時候結果是奇怪的(或只是簡單的錯誤):NSDateComponentsFormatter忽略了單位。爲什麼?
// 22d 23h 15m 34.123s
let timeInterval: NSTimeInterval = 34.123 + 60.0 * (15.0 + 60.0 * (23.0 + 24.0 * 22.0))
let formatter = NSDateComponentsFormatter()
formatter.allowedUnits = [NSCalendarUnit.Year, NSCalendarUnit.Day, NSCalendarUnit.Hour, NSCalendarUnit.Minute, NSCalendarUnit.Second]
formatter.maximumUnitCount = 2
formatter.unitsStyle = .Abbreviated
formatter.zeroFormattingBehavior = .Default
// expected result: 22d 23h
// actual result: 23d 16m
let result = formatter.stringFromTimeInterval(timeInterval)
它不僅省去小時字段在這個例子中,但它也四捨五入了天和的分鐘。我會假設一旦這些日子四捨五入,它應該在剩下的幾分鐘內「用完」。從結果來看,用戶會認爲持續時間絕對超過23天,而事實上並非如此。
這是不幸的...和我使用OS X 10.11和iOS 9,但我仍然遇到這個問題。 –
有時NSDateComponentsFormatter將顯示比maximumUnitCount更多的值。請參閱https://openradar.appspot.com/26354907。仍然發生在iOS 10中。非常令人失望。 – phatmann