当我尝试使用日期组件计算经过的时间时,日期是一秒钟。这是为什么?
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。我怎样才能将它整理好?
答案 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])];