首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nslog时间戳

Nslog时间戳
EN

Stack Overflow用户
提问于 2011-08-02 19:22:08
回答 2查看 4.2K关注 0票数 4

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

设备运动在CMMotionManager.devicemotion.timestamp类中

任何想法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-02 19:44:37

编辑:请参阅Nicolas Lauquin的回答。根据评论,下面的解决方案不正确的,但保留在这里的历史(因为我不能删除它,因为它目前被标记为接受)。

timestamp属性是一个NSTimeInterval,因此您应该能够执行以下操作:

代码语言:javascript
复制
NSLog(@"Motion at time: %@",
[NSDate dateWithTimeIntervalSinceReferenceDate:devicemotion.timestamp]);

NSTimeInterval只是一种类型定义的double类型,因此您可以使用%f而不是%@并直接记录它。

此外,文档并没有指明这个时间戳是根据苹果的参考日期还是标准*nix日期设置的,所以如果前面提到的方法返回的是很久以后的日期,那么您可能需要使用[NSDate dateWithTimeIntervalSince1970:]

正如@davidbitton所建议的,CMDeviceMotiontimestamp是相对于最后一次设备启动的,正确的NSDate可以通过

代码语言:javascript
复制
NSDate *startupTime = [NSDate dateWithTimeIntervalSinceNow:
                          -1 * [[NSProcessInfo processInfo] systemUptime]];

NSDate *deviceMotionDate = [NSDate dateWithTimeInterval:devicemotion.timestamp 
                                              sinceDate:startupTime];

假设@davidbitton是正确的,这应该会产生一个大致准确的NSDate对象。(参考:NSProcessInfo -systemUptime)

但是,考虑到这是多么复杂,为了简单起见,我现在建议,考虑到timestamp属性的性质,您可以将其记录在格式字符串中,如下所示

代码语言:javascript
复制
"... event logged at %0.2f seconds since startup...", devicemotion.timestamp
票数 6
EN

Stack Overflow用户

发布于 2014-01-28 01:29:39

下面是我放在适当位置的解决方案,因为日期是根据Apple文档:

时间戳是指电话启动后的秒数。

我首先在第一次度量时保存originDate (如果我的NSDate为空)。

代码语言:javascript
复制
[self.motionManager startGyroUpdatesToQueue:self.queue withHandler:^(CMGyroData *gyroData, NSError *error) {
    if (self.originDate == nil) {
        self.originDate = [NSDate dateWithTimeIntervalSinceNow:-gyroData.timestamp];
    }   
}];

然后,我可以像这样显示我想要的实际日期:

代码语言:javascript
复制
[NSDate dateWithTimeInterval:mygyroData.timestamp sinceDate:self.originDate]

如果您需要重新启动某些措施,不要忘记将originDate重置为nil。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6911226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档