2011-11-01 66 views
1

当我尝试计算使用日期组件的时间时,日期为一秒。为什么是这样?NSDate 1秒关

NSCalendar *sysCalendar = [NSCalendar currentCalendar]; 
unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; 
NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:timeStarted toDate:[[NSDate date]addTimeInterval:+1.0] options:0]; 
timeElapsed = [sysCalendar dateFromComponents:conversionInfo]; 

我临时的解决办法是增加一秒,但我想知道为什么它正在发生,或者有更好的修复。

编辑:它不是一秒掉,但它是四舍五入。当我以秒为单位获得时间间隔(将其降至小数位)时,它会变为1.9,2.9,3.9,分别显示为00:00:01,00:00:02和00:00:03。我怎样才能把它收集起来?

+1

您可以添加0.5秒。这应该适用于所有情况。但这仍然是一个可怕的解决方案。 – dasdom

回答

1

可以圆一个双(NSTimeInterval)为整数搭配:

NSTimeInterval unrounded = 7.8; 
long rounded = lround(unrounded); 

长整型“四舍五入”现在将包含8.您现在可以施放此回的时间间隔。

NSTimeInterval roundedTimeInterval = (NSTimeInterval)rounded; 

并将其与NSDate函数一起使用。

所以,创建具有唯一的全秒一个NSDate可以使用:

NSDate *nowEnough = [NSDate dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)lround([NSDate timeIntervalSinceReferenceDate])]; 

或四舍五入现有的NSDate的亚秒:

NSDate *thenEnough = [NSDate dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)lround([existingNSDatesName timeIntervalSinceReferenceDate])]; 
+0

这将不得不工作。谢谢! – Baub