我正在尝试使用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