iOS Core Motion 如何将时间戳转换为日期?

iOS Core Motion how to convert timestamp to Date?

我正在检查 CMRecordedAccelerometerData,它有一个时间戳,定义为:

The timestamp is the amount of time in seconds since the device booted.

如何将设备上次启动的时间戳转换为 NSDate?

比如系统提供了一个CMRecordedAccelerometerData对象,时间戳值为:1030958.895134

如果我使用任何可用的参考帧(1970 年,参考日期),我会得到一个错误的日期,而不是 2019 年。我想要记录事件的真实日期。

时间戳是一个 TimeInterval,Double 的类型别名,表示持续时间为秒数。因此,您可以使用 NSDate 的 (timeIntervalSince1970:).

将 TimeInterval 转换为 Date
let myTimeInterval:TimeInterval = 1574660642
let dateNow = NSDate(timeIntervalSince1970: myTimeInterval)  //will print "Nov 24, 2019 at 9:44 PM"

如果您需要使用TimeInterval 获取相对于当前日期的日期,可以使用(timeInterval:since:)

var date = Date()
let timestampOfLastBoot: TimeInterval = 1572628813
let currentTimestamp: TimeInterval = NSDate().timeIntervalSince1970
let dateOfTimeStamp = Date(timeInterval: timestampOfLastBoot-currentTimestamp, since: date)    //will print "Nov 1, 2019 at 10:20 AM"

我想这个答案有点晚了,但是,首先,您可以通过从现在减去正常运行时间 ProcessInfo.processInfo.systemUptime 来获得启动时间,否则从 iOS 9+ ProcessInfo.processInfo.systemUptime 有日期 属性 startDate,这应该是你最初想要的。