timeInterval
不断返回随机数。我认为每次通话时间隔会继续增加,但有时候会得到负数,有时会得到正数。
NSDate *date = groceryItem.lastPurchased;
double timeInterval = [date timeIntervalSinceNow];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d", timeInterval];
答案 0 :(得分:11)
%d表示整数,使用%f表示双重
[NSString stringWithFormat:@"%f", timeInterval];
答案 1 :(得分:11)
请改为尝试:
NSTimeInterval timeInterval = [[NSDate date] timeIntervalSinceDate:groceryItem.lastPurchased];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%f", timeInterval];
这个片段的几点:
NSTimeInterval
而不是double
。它们是等价的,因为它只是一个typedef,但它可以使代码更清晰。[NSDate date]
计算日期和时间,并从groceryItem.lastPurchased
获取时间间隔。只要groceryItem.lastPurchased
过去,这将返回一个正数。groceryItem.lastPurchased
传递给时间间隔计算。为仅使用一次的项声明变量并不总是一个好主意,尤其是在非垃圾收集环境中。尽管声明变量可能会使代码更具可读性,但还有其他方法可以提高可读性。例如,在这种情况下,将属性更改为groceryItem.lastPurchasedDate
,这使得它更加清晰。答案 2 :(得分:7)
如果接收器早于当前日期和时间,则返回值为负。因此,如果date
在之前之前,则为负数。
答案 3 :(得分:6)
timeIntervalSinceNow将返回接收者与当前日期和时间之间的间隔。如果接收器早于当前日期和时间,则返回值为负。如果接收方晚于当前日期和时间,则返回值为正。
希望这有帮助。
答案 4 :(得分:3)
此代码[NSString stringWithFormat:@"%d", timeInterval];
错误。这是一个双重的。不要使用%d。请改用%f。
[NSString stringWithFormat:@"%f", timeInterval];
答案 5 :(得分:2)
上面已经正确回答了,我还补充说你应该使用NSTimeInterval类型而不是双倍。
答案 6 :(得分:1)
您应该使用下面的负号
double timeInterval = - [date timeIntervalSinceNow];