NSDate组件格式化程序未来时间 +1.998730003833771 结果在"1 second"字符串中



我已经手动创建了一个未来的日期,代码为:

[[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将向上舍入)。

最新更新