NSTimeInterval到Unix时间戳

NSTimeInterval到Unix时间戳

问题描述:

我从 CMMotionManager 获取了 CMDeviceMotion 对象. CMDeviceMotion的属性之一是时间戳,它表示为NSTimeInterval(双精度).根据文档,这可以实现不到毫秒"的时间戳精度.

I'm getting CMDeviceMotion objects from CMMotionManager. One of the properties of the CMDeviceMotion is timestamp, which is expressed as a NSTimeInterval (double). This allows for "sub millisecond" timestamp precision, according to documentation.

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

不幸的是,NSTimeInterval是自上次设备启动以来计算的,这给以原始格式使用它带来了巨大的挑战.

Unfortunately, NSTimeInterval is calculated since last device boot, posing significant challenges to using it in its raw form.

有人能将NSTimeInterval转换为类似时间戳记(UTC时区)的Unix吗?

Does anyone have a working code to convert this NSTimeInterval into a Unix like timestamp (UTC timezone)?

谢谢!

将磁力计值与CoreMotion事件进行比较时,我遇到了类似的问题.如果要转换这些NSTimeIntervals,则只需计算一次偏移:

I had a similar problem when comparing magnetometer values with CoreMotion events. If you want to transform these NSTimeIntervals you just need to calculate the offset once:

// 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;