Nslog时间戳

时间:2011-08-02 11:22:08

标签: iphone timestamp nslog

我想nslog设备运动时间戳属性。

设备动作位于CMMotionManager.devicemotion.timestamp类

任何想法。

2 个答案:

答案 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