【发布时间】:2011-11-26 10:08:15
【问题描述】:
我从 CMMotionManager 获取 CMDeviceMotion 对象。 CMDeviceMotion 的属性之一是时间戳,它表示为 NSTimeInterval (double)。根据文档,这允许“亚毫秒”时间戳精度。
[motionManager startDeviceMotionUpdatesToQueue:motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) {
NSLog(@"Sample: %d Timestamp: %f ",counter, motion.timestamp);
}
不幸的是,NSTimeInterval 是自上次设备启动后计算的,这给以原始形式使用它带来了重大挑战。
有没有人有工作代码可以将此 NSTimeInterval 转换为类似 Unix 的时间戳(UTC 时区)?
谢谢!
【问题讨论】:
-
NSTimeInterval通常与参考日期相关。您从哪里得知这是与上次设备启动相关的? -
LOL 在“亚毫秒”。
NSTimeInterval是具有 53 位精度的double,分辨率至少为 1/2^52 *(自 2001 年 1 月 1 日以来的时间)。目前大约需要 80 纳秒。他们不仅没有获得任何精度,就像手持计算器一分钟会告诉他们的那样,而且现在甚至不可能用任何其他精度来可靠地校准时间戳,甚至达到 10 毫秒的精度。此外,我怀疑测量是在传感器芯片空闲时进行的,而时间戳反映了内核何时开始处理数据。真是一团糟。 -
只需查看文档,无论是在 Xcode 中还是在类参考中 - 它清楚地说明(复制)“时间戳是自设备启动以来的时间量,以秒为单位”。不是从参考时间开始。
标签: ios timestamp nstimeinterval core-motion