Nslog timestamp

我们两清 提交于 2019-12-11 02:26:27

问题


I want to nslog the device motion timestamp property .

The device motion is in the class CMMotionManager.devicemotion.timestamp

Any ideas.


回答1:


Edit: Please see Nicolas Lauquin's answer. Per the comments, the following solution is not correct but is retained here for history (and because I can't delete it since it is currently marked accepted).


The timestamp property is an NSTimeInterval, so you should be able to do:

NSLog(@"Motion at time: %@",
[NSDate dateWithTimeIntervalSinceReferenceDate:devicemotion.timestamp]);

NSTimeInterval is just a typedef'd double type, so you could use %f instead of %@ and log it directly.

Also, the docs don't indicate whether this timestamp is set against Apple's reference date or the standard *nix date, so you may need to use [NSDate dateWithTimeIntervalSince1970:] if the aforementioned method returns dates far in the future.

As @davidbitton has suggested the CMDeviceMotion's timestamp is relative to the last device boot, the correct NSDate could be derived by

NSDate *startupTime = [NSDate dateWithTimeIntervalSinceNow:
                          -1 * [[NSProcessInfo processInfo] systemUptime]];

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

This should yield a roughly accurate NSDate object, assuming @davidbitton is correct. (reference: NSProcessInfo -systemUptime)

However, given how complicated this is, I would now suggest for simplicity that, given the nature of the timestamp property, that you log it in a format string as something like

"... event logged at %0.2f seconds since startup...", devicemotion.timestamp



回答2:


Here the solution I put in place because the date is according to Apple documentation :

The time stamp is the amount of time in seconds since the phone booted.

I first save the originDate at the first mesure (if my NSDate is nil).

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

Then I can display when I want the real date like this :

[NSDate dateWithTimeInterval:mygyroData.timestamp sinceDate:self.originDate]

Don't forget to reset the originDate to nil if you need to restart some mesure.



来源:https://stackoverflow.com/questions/6911226/nslog-timestamp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!