我想要nslog设备的运动时间戳属性。
设备运动在CMMotionManager.devicemotion.timestamp类中
任何想法。
发布于 2011-08-02 19:44:37
编辑:请参阅Nicolas Lauquin的回答。根据评论,下面的解决方案不正确的,但保留在这里的历史(因为我不能删除它,因为它目前被标记为接受)。
timestamp属性是一个NSTimeInterval,因此您应该能够执行以下操作:
NSLog(@"Motion at time: %@",
[NSDate dateWithTimeIntervalSinceReferenceDate:devicemotion.timestamp]);NSTimeInterval只是一种类型定义的double类型,因此您可以使用%f而不是%@并直接记录它。
此外,文档并没有指明这个时间戳是根据苹果的参考日期还是标准*nix日期设置的,所以如果前面提到的方法返回的是很久以后的日期,那么您可能需要使用[NSDate dateWithTimeIntervalSince1970:]。
正如@davidbitton所建议的,CMDeviceMotion的timestamp是相对于最后一次设备启动的,正确的NSDate可以通过
NSDate *startupTime = [NSDate dateWithTimeIntervalSinceNow:
-1 * [[NSProcessInfo processInfo] systemUptime]];
NSDate *deviceMotionDate = [NSDate dateWithTimeInterval:devicemotion.timestamp
sinceDate:startupTime];假设@davidbitton是正确的,这应该会产生一个大致准确的NSDate对象。(参考:NSProcessInfo -systemUptime)
但是,考虑到这是多么复杂,为了简单起见,我现在建议,考虑到timestamp属性的性质,您可以将其记录在格式字符串中,如下所示
"... event logged at %0.2f seconds since startup...", devicemotion.timestamp发布于 2014-01-28 01:29:39
下面是我放在适当位置的解决方案,因为日期是根据Apple文档:
时间戳是指电话启动后的秒数。
我首先在第一次度量时保存originDate (如果我的NSDate为空)。
[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。
https://stackoverflow.com/questions/6911226
复制相似问题