NSDate 1秒关闭

时间:2011-11-01 16:32:03

标签: objective-c nsdate

当我尝试使用日期组件计算经过的时间时,日期是一秒钟。这是为什么?

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 :(得分:1)

您可以将double(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])];