我已经手动创建了一个日期,使用以下代码:
[[NSDate date] dateByAddingTimeInterval: s + 60*m + 60*60*h ];
我为" s"传递2,为" m"传递0和" h"。结果是一个NSDate对象,将来恰好是2秒。
然后稍后调用一些函数,我尝试使用NSDateComponentsFormatter获取该日期的字符串。我拨打以下电话:
NSCalendar* calendar = [NSCalendar currentCalendar];
calendar.locale = self.locale;
calendar.timeZone = self.timeZone;
NSCalendarUnit units = NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents* deltaComponents = [calendar components:units fromDate:[NSDate date] toDate:to options:0];
deltaComponents.calendar = calendar;
NSString *result = [self.componentFormatter stringFromDateComponents:deltaComponents];
问题是,当我打电话时
[calendar components:units fromDate:[NSDate date] toDate:to options:0];
时间变化很小!设置这样的日志会向我们展示问题:
NSLog(@"TIME INTERVAL SINCE NOW: %@",@([date timeIntervalSinceNow]));
1.998730003833771
结果字符串:
" 1秒"
在这里你可以看到我的沮丧。我希望NSDateComponentsFormatter将这个小差异四舍五入到#34; 2秒",但我无法弄清楚如何做到这一点。
答案 0 :(得分:1)
然后几个函数调用,......问题是到时候......
在调用[NSDate date]
之前,只需保存datebyAddingTimeInterval
的原始值,然后再使用该值,而不是再次调用[NSDate date]
。
任何围绕等等的尝试听起来像是一个"软糖因素",它们永远不会好用。
答案 1 :(得分:0)
添加2
秒,而不是准确添加2.99
秒。这将使所有差异都被四舍五入。
或者您可以添加2.5
进行常见的舍入(< 0.5将向下舍入,> 0.5将向上舍入)。