2011-09-27 30 views
5

Tôi nhận được CMDeviceMotion đối tượng từ CMMotionManager. Một trong các thuộc tính của CMDeviceMotion là dấu thời gian, được biểu diễn dưới dạng NSTimeInterval (double). Điều này cho phép độ chính xác thời gian "sub mili giây", theo tài liệu.NSTimeInterval để bỏ dấu thời gian

[motionManager startDeviceMotionUpdatesToQueue:motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) { 
    NSLog(@"Sample: %d Timestamp: %f ",counter, motion.timestamp); 
} 

Thật không may, NSTimeInterval được tính kể từ lần khởi động thiết bị cuối cùng, đặt ra những thách thức đáng kể khi sử dụng nó ở dạng thô.

Có ai có mã làm việc để chuyển đổi NSTimeInterval này thành dấu thời gian giống Unix (múi giờ UTC) không?

Cảm ơn bạn!

+0

'NSTimeInterval' thường tương ứng với ngày tham chiếu. Nơi nào bạn nhận được rằng điều này là tương đối từ khởi động thiết bị cuối cùng? –

+0

LOL tại "sub mili giây". 'NSTimeInterval' là một' double' với độ chính xác 53 bit, cho độ phân giải ít nhất là 1/2^52 * (thời gian từ 1/1/01). Điều đó hiện ra khoảng 80 nano giây. Chúng không chỉ đạt được độ chính xác * bất kỳ, như một phút với một máy tính cầm tay sẽ cho chúng biết, nhưng bây giờ không thể xác định chính xác các dấu thời gian bằng bất kỳ thứ gì khác với độ chính xác 10 mili giây. Hơn nữa, tôi nghi ngờ các phép đo được thực hiện khi giải trí chip cảm biến, trong khi các dấu thời gian phản ánh khi hạt nhân có xung quanh để xử lý dữ liệu. Thật là một mớ hỗn độn. – Potatoswatter

Trả lời

14

Tôi gặp vấn đề tương tự khi so sánh các giá trị từ kế với các sự kiện CoreMotion. Nếu bạn muốn chuyển đổi các NSTimeIntervals này, bạn chỉ cần tính toán bù trừ một lần:

// 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

Tôi tưởng tượng nó được cho là được sử dụng như một phép đo tương đối để cho phép bạn thực hiện các sự kiện chuyển động chuỗi một cách chính xác, vì vậy chúng hoạt động hiệu quả nhất có thể.

Tôi không thể hiểu tại sao bạn cần ngày giờ thật sự của một sự kiện chuyển động vì tất cả chúng đều được xử lý ngay lập tức. Nhưng nếu bạn thực sự muốn, bạn phải có dấu thời gian của một sự kiện, hãy sử dụng ngày đó để xác định ngày cơ sở và sau đó sử dụng ngày cơ sở của bạn để tìm ra thời gian thực tế của các sự kiện tiếp theo.

+0

Tôi sợ như vậy. Tôi đã hy vọng để vẽ các sự kiện chuyển động sau này, cho phép người dùng so sánh các sự kiện chuyển động (ứng dụng Actigraphy). Điều này có nghĩa là toán học nhiều hơn một phần của tôi: ( –

+1

Không quá nhiều. Ngày của NSDateByAddingTimeInterval sẽ làm phần lớn nó cho bạn. – jrturton

Các vấn đề liên quan