我已经手动创建了一个未来的日期,代码为:
[[NSDate date] dateByAddingTimeInterval: s + 60*m + 60*60*h ];
我输入2表示"s",0表示"m"one_answers"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将这个小差异四舍五入到"2秒",但我不知道如何做到这一点。
然后几次函数调用之后,。。。问题是到那时。。。
只需在调用datebyAddingTimeInterval
之前保存[NSDate date]
的原始值,然后使用该值,而不是再次调用[NSDate date]
。
任何绕过等等的尝试听起来都像是一种"捏造因素",而且它们从来都不适合使用。
不加2
秒,而加2.99
秒。这将使所有的差异被四舍五入。
或者,您可以添加2.5
进行普通舍入(<0.5将向下舍入,>0.5将向上舍入)。