NSTimeInterval для отметки времени Unix - PullRequest
6 голосов
/ 28 сентября 2011

Я получаю CMDeviceMotion объекты из CMMotionManager .Одним из свойств CMDeviceMotion является метка времени, которая выражается как NSTimeInterval (double).В соответствии с документацией это обеспечивает точность метки времени «менее миллисекунды».

[motionManager startDeviceMotionUpdatesToQueue:motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) { 
  NSLog(@"Sample: %d Timestamp: %f ",counter,  motion.timestamp);
}

К сожалению, NSTimeInterval рассчитывается с момента последней загрузки устройства, что создает значительные проблемы при использовании его в необработанном виде.

У кого-нибудь есть рабочий код для преобразования этого NSTimeInterval в Unix-подобную временную метку (часовой пояс UTC)?

Спасибо!

Ответы [ 2 ]

15 голосов
/ 28 сентября 2011

У меня была похожая проблема при сравнении значений магнитометра с событиями CoreMotion.Если вы хотите преобразовать эти NSTimeIntervals, вам просто нужно рассчитать смещение один раз:

// during initialisation

// Get NSTimeInterval of uptime i.e. the delta: now - bootTime
NSTimeInterval uptime = [NSProcessInfo processInfo].systemUptime;

// Now since 1970
NSTimeInterval nowTimeIntervalSince1970 = [[NSDate date] timeIntervalSince1970];

// Voila our offset
self.offset = nowTimeIntervalSince1970 - uptime;
2 голосов
/ 28 сентября 2011

Я предполагаю, что он должен использоваться как относительная мера, чтобы позволить вам правильно упорядочивать события движения, чтобы они реализовали как можно более легкую реализацию.

Я не могу понять, зачем вам нужны фактическая дата и время события движения, поскольку все они решаются практически сразу.Но если вы действительно хотите, вам нужно получить временную метку одного события, использовать ее с текущей датой для определения базовой даты, а затем использовать базовую дату для получения фактического времени последующих событий.

...