- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我在 iOS 8 上使用 NSDateComponentsFormatter,我注意到 stringFromTimeInterval:
方法的实现中可能存在错误,但我不能确定。
这是我设置格式化程序的方式:
NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
formatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorDefault;
formatter.allowedUnits = NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
formatter.unitsStyle = NSDateComponentsFormatterUnitsStylePositional;
现在,当我将小于 60 秒的任何内容传递给 stringFromTimeInterval:
方法时,格式化程序返回 1
或 01
,这显然是错误,它应该返回类似 0:XX
的内容。
我还注意到,通过将 unitsStyle
更改为 NSDateComponentsFormatterUnitsStylePositional
以外的任何内容,该方法会返回正确的字符串!
例子:
unitsStyle = NSDateComponentsFormatterUnitsStylePositional
:
(lldb) po [formatter stringFromTimeInterval:12]
= "1"
=> 应该返回“0:12”!!
unitsStyle = NSDateComponentsFormatterUnitsStyleAbbreviated
:
(lldb) po [formatter stringFromTimeInterval:12]
= "12 s"
=> 正确!
这让我认为这是 Apple 的 API 实现中的错误,还是我遗漏了什么?
最佳答案
这似乎仍然是 iOS 8.3 和 Xcode 6.3 的问题。然而,有一种方法可以解决它,即使不完美,至少可以让您获得正确的格式,而不必自己处理与时间相关的组件。
这是 Swift 中的一个示例解决方法(您可以在 Playground 中测试)
let formatter = NSDateComponentsFormatter()
formatter.unitsStyle = .Positional
formatter.zeroFormattingBehavior = .Pad
formatter.allowedUnits = .CalendarUnitMinute | .CalendarUnitSecond
调用 let string = formatter.stringFromTimeInterval(4)
将打印“00:04”。
调用 let string = formatter.stringFromTimeInterval(88)
将打印“01:28”。
现在您可以根据您有超过 1 小时还是 1 天的时间来使用 allowedUnits
。例如,在一个具有 formatter
属性的类中:
func updateTimeFormatterForTime(time: NSTimeInterval) {
if time > 3600 && time < 24 * 3600 {
self.formatter.allowedUnits = .CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond
} else if time > 24 * 3600 {
self.formatter.allowedUnits = .CalendarUnitDay | .CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond
}
}
关于ios - NSDateComponentsFormatter stringFromTimeInterval 为小于 1 分钟的间隔返回不正确的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28087724/
NSDateComponentsFormatter *formatter; formatter = [[NSDateComponentsFormatter alloc] init]; formatte
我发现 NSDateComponentsFormatter 的行为相当奇怪 - 在某些时间间隔内,它只会为结果增加额外的时间。 我假设对于超过 1 年的时间间隔,它可以添加一个“闰小时”,但在本例中,
我有一段代码,显示一个关于窗口,时间间隔以秒为单位,应该格式化为分钟或小时。当我在本地构建和测试时它工作正常,但 Mac App Store 上的版本仅显示以秒为单位的时间。知道这是为什么吗? //
let date = NSDate() let future = NSDate.distantFuture() let f = NSDateComponentsFormatter() f.unitsS
我想将以分钟为单位的时间转换为用户友好的字符串。下面的代码解决了这个问题,除了一件事 - 我希望结果看起来像 1 hr 30 min,但是我得到了 1 hr, 30 min。如何为 NSDateCom
我最近发现了 iOS8 的新类 NSDateComponentsFormatter,它可以让您格式化时间间隔而不是日期。凉爽的。我编写代码来执行此操作的次数比我想的要多。所以我决定尝试在 Playgr
我正在尝试使用 NSDateComponentsFormatter 生成用户可读的持续时间字符串。虽然它通常工作得很好,但有时结果很奇怪(或者完全错误): // 22d 23h 15m 34.123s
我希望除了阅读我得到的文档之外我没有遗漏任何东西: NSDateComponentsFormatter 提供了一个方法 - (NSString * nullable)stringFromTimeInt
基本上我想要的是获取仅以小时表示的时间间隔的值,而不将其四舍五入为整小时(使用 NSDateComponentsFormatter 使其正确格式化和本地化)。不知道是不是我理解错了NSDateComp
我正在尝试使用 NSDateComponentsFormatter 格式化为 MM:SS: let formatter = NSDateComponentsFormatter() formatter.
我在 iOS 8 上使用 NSDateComponentsFormatter,我注意到 stringFromTimeInterval: 方法的实现中可能存在错误,但我不能确定。 这是我设置格式化程序的
我在日、小时和分钟收到错误。这是代码: let dayCalendarUnit = calendar.components([NSCalendarUnit.Day, NSCalendarUnit.Ho
我正在尝试获取今天日期和 future 日期之间的天数。 我每秒调用以下命令: NSDateComponents *components = [[NSDateComponents alloc] ini
我手动创建了一个 future 的日期,代码如下: [[NSDate date] dateByAddingTimeInterval: s + 60*m + 60*60*h ]; 我为“s”传递了 2,
我是一名优秀的程序员,十分优秀!