Nslog timestamp - PullRequest
       10

Nslog timestamp

2 голосов
/ 02 августа 2011

Я хочу nslog свойство timestamp движения устройства.

Движение устройства находится в классе CMMotionManager.devicemotion.timestamp

Любые идеи.

Ответы [ 2 ]

9 голосов
/ 27 января 2014

Вот решение, которое я поставил на место, потому что дата соответствует документации Apple:

Отметка времени - это количество времени в секундах с момента загрузки телефона.

Сначала я сохраняю originDate при первом измерении (если мой 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 на ноль, если вам нужно перезапустить некоторые меры.

4 голосов
/ 02 августа 2011

Редактировать : Пожалуйста, смотрите ответ Николя Локена. Согласно комментариям, следующее решение не корректно , но сохраняется здесь для истории (и потому что я не могу удалить его, так как оно в настоящее время помечено как принятое).


Свойство timestamp является NSTimeInterval, поэтому вы должны иметь возможность:

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

NSTimeInterval это просто typedef'd double тип, так что вы можете использовать %f вместо %@ и регистрировать его напрямую.

Кроме того, в документах не указано, установлена ​​ли эта временная метка в отношении контрольной даты Apple или стандартной * nix-даты, поэтому вам может потребоваться использовать [NSDate dateWithTimeIntervalSince1970:], если вышеупомянутый метод возвращает даты в далеком будущем.

Поскольку @davidbitton предположил, что CMDeviceMotion timestamp относится к последней загрузке устройства, правильное значение NSDate может быть получено с помощью

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

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

Это должно дать примерно точный NSDate объект, предполагая, что @davidbitton верен. (ссылка: NSProcessInfo -systemUptime )

Однако, учитывая, насколько это сложно, я бы сейчас предложил для простоты, учитывая природу свойства timestamp, чтобы вы записали его в строку формата как что-то вроде

"... event logged at %0.2f seconds since startup...", devicemotion.timestamp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...