ARSession
的currentFrame
(ARFrame
(具有类型为TimeInterval
的timestamp
属性,该属性表示捕获帧时的正常运行时间。
我需要将这个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时间(