Swift: ARKit TimeInterval to Date



ARSessioncurrentFrame(ARFrame(具有类型为TimeIntervaltimestamp属性,该属性表示捕获帧时的正常运行时间。

我需要将这个TimeInterval转换为设备的当前时域。

如果我对timestamp的假设是正确的,那么将内核BootTime和timestamp加在一起就会得到正确的日期。

问题:将内核BootTime和timestamp加在一起会得到一个不正确的Date。(取决于设备的上次启动时间,最多2天的差异(

当前代码:

func kernelBootTime() -> Date {
var mib = [CTL_KERN, KERN_BOOTTIME]
var bootTime = timeval()
var bootTimeSize = MemoryLayout<timeval>.stride
if sysctl(&mib, UInt32(mib.count), &bootTime, &bootTimeSize, nil, 0) != 0 {
fatalError("Could not get boot time, errno: (errno)")
}
return Date(timeIntervalSince1970: Double(bootTime.tv_sec) + Double(bootTime.tv_usec) / 1_000_000.0)
}
public func checkTime(_ session: ARSession) {
guard let frame = session.currentFrame else { return }
print(Date(timeInterval: frame.timestamp, since: kernelBootTime()))
}

我找到了解决方案。

var refDate = Date.now - ProcessInfo.processInfo.systemUptime

提供最后一次设备重新启动的日期

public func checkTime(_ session: ARSession) {
guard let frame = session.currentFrame else { return }
print(Date(timeInterval: frame.timestamp, since: refDate))
}

打印拍摄图像的确切时间。(UTC时间(

相关内容

  • 没有找到相关文章

最新更新