2011-09-27 8 views
5

나는 CMDeviceMotion 개체를 CMMotionManager에서 얻고 있습니다. CMDeviceMotion의 속성 중 하나는 타임 스탬프이며 NSTimeInterval (double)로 표시됩니다. 이것은 문서에 따라 "sub millisecond"타임 스탬프 정밀도를 허용합니다.유닉스 타임 스탬프 NSTimeInterval

불행히도 NSTimeInterval은 마지막 장치 부팅 이후로 계산되므로 원시 형식으로 사용하는 데 큰 어려움이 있습니다.

이 NSTimeInterval을 유닉스 타임 스탬프 (UTC 시간대)로 변환하는 작업 코드가 있습니까?

감사합니다.

+0

는'NSTimeInterval'은 일반적으로 기준 날짜를 기준으로합니다. 이 장치는 마지막 장치 부팅에서 상대적이라고 어디에서 얻습니까? –

+0

LOL은 "sub millisecond"입니다. 'NSTimeInterval'은 53 비트의 정밀도를 가진'double'이며 적어도 1/2^52 * (1/1/01부터의 시간)의 분해능을 제공합니다. 현재 약 80 나노초 정도입니다. 핸드 헬드 계산기를 사용하면 1 분 정도의 정밀도를 얻을 수있을뿐 아니라 10 밀리 초 단위의 정밀도로 타임 스탬프를 안정적으로 보정하는 것은 불가능합니다. 또한, 센서 칩의 여유 시간에 측정이 이루어 졌다고 생각하지만, 커널이 데이터를 처리하려고 할 때 타임 스탬프가 반영됩니다. 이 얼마나 엉망 이죠. – Potatoswatter

답변

14

CoreMotion 이벤트와 자력계 값을 비교할 때 비슷한 문제가있었습니다. 당신이이 NSTimeIntervals을 변환하려면 그냥 한 번 오프셋 계산해야합니다

// during initialisation 

// Get NSTimeInterval of uptime i.e. the delta: now - bootTime 
NSTimeInterval uptime = [NSProcessInfo processInfo].systemUptime; 

// Now since 1970 
NSTimeInterval nowTimeIntervalSince1970 = [[NSDate date] timeIntervalSince1970]; 

// Voila our offset 
self.offset = nowTimeIntervalSince1970 - uptime; 
1

모션 이벤트를 올바르게 시퀀스 할 수 있도록 상대 척도로 사용되기로되어있어 가벼운 구현이 될 수 있다고 생각합니다.

모션 이벤트의 실제 날짜와 시간이 왜 필요한지 생각할 수 없습니다. 모든 이벤트가 거의 즉시 처리됩니다. 그러나 정말로 원한다면 한 이벤트의 타임 스탬프를 가져와야하며 현재 날짜를 기준 날짜로 사용하고 기본 날짜를 사용하여 후속 이벤트의 실제 시간을 가져와야합니다.

+0

나는 그처럼 두려웠다. 나중에 모션 이벤트를 플로팅하여 모션 이벤트 (Actigraphy 앱)를 비교할 수 있기를 바랍니다. 이것은 더 많은 수학을 의미합니다 :( –

+1

NSDate의 dateByAddingTimeInterval은 대부분 당신을 위해 그것을 할 것입니다. – jrturton