osa*_*noj 31 objective-c foundation ios swift nsdatecomponentsformatter
基本上我想要的是获得仅以小时为单位表示的时间间隔的值,而不是将其四舍五入到整小时(使用NSDateComponentsFormatter来使其正确格式化和本地化).我不知道我是否误解了NSDateComponentsFormatter.allowsFractionalUnits的使用,但我无法让格式化程序给我一个十进制值.任何人都可以帮助我发现我的错误或告诉我我以何种方式误解了这个?
从Apple docs about allowFractionalUnits属性:
当使用可用单位无法准确表示值时,可以使用小数单位.例如,如果不允许分钟,则值"1h 30m"可以格式化为"1.5h".
Swift示例代码:
let formatter = NSDateComponentsFormatter()
formatter.unitsStyle = .Abbreviated
formatter.allowedUnits = .Hour
formatter.allowsFractionalUnits = true
let onePointFiveHoursInSeconds = NSTimeInterval(1.5 * 60.0 * 60.0)
print(formatter.stringFromTimeInterval(onePointFiveHoursInSeconds)!)
//"1h" instead of expected "1.5h"
Run Code Online (Sandbox Code Playgroud)
Objective-C代码中的相同示例:
NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
formatter.unitsStyle = NSDateComponentsFormatterUnitsStyleAbbreviated;
formatter.allowedUnits = NSCalendarUnitHour;
formatter.allowsFractionalUnits = YES;
NSTimeInterval onePointFiveHoursInSeconds = 1.5 * 60.0 * 60.0;
NSLog(@"%@", [formatter stringFromTimeInterval:onePointFiveHoursInSeconds]);
//"1h" instead of expected "1.5h"
Run Code Online (Sandbox Code Playgroud)
更新:我已向Apple报告了有关此问题的错误(rdar:// 22660145).
进行了一些挖掘(分解Foundation)后,似乎对-[NSDateComponentsFormatter _stringFromDateComponents:]中的-[_ unitFormatter stringFromNumber:]的每次调用都传递了+ [NSNumber numberWithInteger:],该数据将删除浮点数据。
你没做错什么 该标志只是被打破。
viv*_*vat -5
在此处输入代码据我了解,您想以 12 小时格式显示时间,对吗?下面是代码: Swift->
let dateAsString = "20:30"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "HH:mm"
let date = dateFormatter.dateFromString(dateAsString)
dateFormatter.dateFormat = "h:mm a"
let date12 = dateFormatter.stringFromDate(date!)
txtText.text = date12
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
786 次 |
| 最近记录: |