NSDateComponentsFormatter未来时间+1.998730003833771结果为" 1秒"串

时间:2015-12-28 23:49:15

标签: ios objective-c iphone nsdate nsdatecomponentsformatter

我已经手动创建了一个日期,使用以下代码:

[[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秒",但我无法弄清楚如何做到这一点。

2 个答案:

答案 0 :(得分:1)

  

然后几个函数调用,......问题是到时候......

在调用[NSDate date]之前,只需保存datebyAddingTimeInterval的原始值,然后再使用该值,而不是再次调用[NSDate date]

任何围绕等等的尝试听起来像是一个"软糖因素",它们永远不会好用。

答案 1 :(得分:0)

添加2秒,而不是准确添加2.99秒。这将使所有差异都被四舍五入。

或者您可以添加2.5进行常见的舍入(< 0.5将向下舍入,> 0.5将向上舍入)。