将十六进制代码转换为日期(BLE) - 算法

时间:2018-06-13 12:53:19

标签: ios swift

示例日期和相应的十六进制代码

min: 01-Jan-2001 00:00:00 -> Hex code 00 00 00 00
max: 31-Dec-2099 23:59:59 -> Hex code BA 36 8E 7F

Value 0 reckons to 01-Jan-2001 00:00:00 Offset value for UNIX Timestamp: 978307200

如何按照相同的模式将给定的十六进制代码转换为日期?

1 个答案:

答案 0 :(得分:1)

数据是日期偏移的大端表示 “参考日期”(2001年1月1日00:00:00 UTC):

let data = Data(bytes: [0xBA, 0x36, 0x8E, 0x7F])
let offset = UInt32(bigEndian: data.withUnsafeBytes { $0.pointee })
let date = Date(timeIntervalSinceReferenceDate: TimeInterval(offset))
print(date) // 2099-12-31 23:59:59 +0000

如果输入确实是以十六进制字符串形式给出,而不是Data

let hex = "BA368E7F"
if let offset = UInt32(hex, radix: 16) {
    let date = Date(timeIntervalSinceReferenceDate: TimeInterval(offset))
    print(date) // 2099-12-31 23:59:59 +0000
}