问题描述
我从 CMMotionManager 获取 CMDeviceMotion 对象.CMDeviceMotion 的属性之一是时间戳,它表示为 NSTimeInterval (double).根据文档,这允许亚毫秒"时间戳精度.
I'm getting CMDeviceMotion objects from CMMotionManager. One of the properties of the CMDeviceMotion is timestamp, which is expressed as a NSTimeInterval (double). This allows for "sub millisecond" timestamp precision, according to documentation.
[motionManager startDeviceMotionUpdatesToQueue:motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) { NSLog(@"Sample: %d Timestamp: %f ",counter, motion.timestamp); }
不幸的是,NSTimeInterval 是自上次设备启动后计算的,这给以原始形式使用它带来了重大挑战.
Unfortunately, NSTimeInterval is calculated since last device boot, posing significant challenges to using it in its raw form.
有没有人有工作代码可以将此 NSTimeInterval 转换为类似 Unix 的时间戳(UTC 时区)?
Does anyone have a working code to convert this NSTimeInterval into a Unix like timestamp (UTC timezone)?
谢谢!
推荐答案
在将磁力计值与 CoreMotion 事件进行比较时,我遇到了类似的问题.如果你想转换这些 NSTimeIntervals 你只需要计算一次偏移量:
I had a similar problem when comparing magnetometer values with CoreMotion events. If you want to transform these NSTimeIntervals you just need to calculate the offset once:
// 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;