在Swift中如何将Unix Epoch毫秒级时间戳转换为Date
Swift 毫秒级Unix时间戳字符串转Date类型方法
核心逻辑
Swift 原生Date的init(timeIntervalSince1970:)方法要求传入秒级的TimeInterval(Double类型)参数,而你拿到的是毫秒级的字符串时间戳,所以需要先做两步转换:
- 将字符串转换为数值类型
- 将毫秒值除以1000转换为秒级时间戳
安全实现代码
let val = "1492495200000" // 安全转换字符串为Double,避免强制解包崩溃 guard let milliTimestamp = Double(val) else { // 此处自定义处理字符串格式非法的场景 print("无效的时间戳格式") // return 或者抛出错误都可 fatalError() } // 毫秒转秒后生成Date实例 let targetDate = Date(timeIntervalSince1970: milliTimestamp / 1000)
结果验证示例(可选)
如果需要验证转换结果是否正确,可以用DateFormatter转为可读时间:
let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" // 按需设置时区,这里设置为东八区 formatter.timeZone = TimeZone(secondsFromGMT: 8 * 3600) print(formatter.string(from: targetDate)) // 输出:2017-04-18 14:00:00
注意事项
- 不要用
Int类型接收时间戳值:32位设备上Int最大值仅支持到2038年的秒级时间戳,用Double可以规避2038年问题 - 不要忘记除以1000:如果直接传入毫秒值,生成的Date会是远在未来的错误时间
内容的提问来源于stack exchange,提问作者Ricardo Guerrero
相关产品推荐
相关产品推荐

