2011-11-01 3 views
1

날짜 구성 요소를 사용하여 경과 된 시간을 계산하려고하면 날짜가 1 초 남았습니다. 왜 이런거야?NSDate 1 Second Off

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 초를 추가하는 것입니다. 그러나 왜 그런 일이 일어나고 있는지 또는 더 나은 수정이 필요한지 이해하고 싶습니다.

편집 : 1 초가 아니지만 반올림됩니다. 시간 간격을 초 단위로 계산하면 (소수점 이하로) 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의 subseconds을 반올림하기 :

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

이것은 작동해야합니다. 감사! – Baub