我想nslog设备运动时间戳属性。
设备动作位于CMMotionManager.devicemotion.timestamp类
中任何想法。
答案 0 :(得分:9)
这里是我实施的解决方案,因为日期是根据Apple文档:
时间戳是自手机启动以来的秒数。
我首先将originDate保存在第一个mesure中(如果我的NSDate为nil)。
[self.motionManager startGyroUpdatesToQueue:self.queue withHandler:^(CMGyroData *gyroData, NSError *error) {
if (self.originDate == nil) {
self.originDate = [NSDate dateWithTimeIntervalSinceNow:-gyroData.timestamp];
}
}];
然后我可以在想要这样的真实日期时显示:
[NSDate dateWithTimeInterval:mygyroData.timestamp sinceDate:self.originDate]
如果您需要重新启动某个测试,请不要忘记将originDate重置为nil。
答案 1 :(得分:4)
编辑:请参阅Nicolas Lauquin的回答。根据评论,以下解决方案不正确,但在此处保留历史记录(因为我目前已被标记为已接受,因此无法将其删除)。
timestamp
属性为NSTimeInterval
,因此您应该可以:
NSLog(@"Motion at time: %@",
[NSDate dateWithTimeIntervalSinceReferenceDate:devicemotion.timestamp]);
NSTimeInterval
只是typedef'd double
类型,因此您可以使用%f
代替%@
并直接登录。
此外,文档并未指明此时间戳是针对Apple的参考日期还是标准* nix日期设置的,因此如果上述方法将来会更新日期,则可能需要使用[NSDate dateWithTimeIntervalSince1970:]
。 / p>
由于@davidbitton建议CMDeviceMotion
的{{1}}与上次设备启动相关,因此可以通过
timestamp
NSDate
假设@davidbitton是正确的,这应该产生一个大致准确的NSDate *startupTime = [NSDate dateWithTimeIntervalSinceNow:
-1 * [[NSProcessInfo processInfo] systemUptime]];
NSDate *deviceMotionDate = [NSDate dateWithTimeInterval:devicemotion.timestamp
sinceDate:startupTime];
对象。 (参考:NSProcessInfo -systemUptime)
然而,考虑到这有多复杂,我现在建议为了简单起见,鉴于NSDate
属性的性质,您将其以格式字符串的形式记录为
timestamp