ios - NSDateComponentsFormatter future 时间 +1.998730003833771 结果为 "1 second"字符串

标签 ios objective-c iphone nsdate nsdatecomponentsformatter

我手动创建了一个 future 的日期,代码如下:

[[NSDate date] dateByAddingTimeInterval: s + 60*m + 60*60*h ];

我为“s”传递了 2,为“m”和“h”传递了 0。结果是一个 NSDate 对象,正好是 future 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 秒”,但我不知道该怎么做。

最佳答案

Then a few function calls later,... The problem is that by the time...

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

任何四舍五入的尝试听起来都像是“捏造因素”,而且它们永远都不好用。

关于ios - NSDateComponentsFormatter future 时间 +1.998730003833771 结果为 "1 second"字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34502480/

相关文章:

ios - getSteam iOS sdk 的回调问题

ios - 如何在 phonegap 中使用 NSUserDefaults?

ios - 如果您的应用程序被 iOS 系统终止,它会生成崩溃报告吗?

iphone - 加载一个随机的 UIViewController?

ios - 如何在 iOS 中使用 Bing Api 翻译语言?

Objective-C:如何求解方程组?

objective-c - 如何在 cocoa 中创建一个黑色圆角窗口

iphone - 在 UITextField 中禁用放大镜

iphone - 如何根据 iphone UITableView 中的文本长度调整单元格标签的大小?

iphone - 调度队列、并发和完成处理