SwiftData存入SQLite的日期格式解析及调试转换方法
SwiftData中SQLite存储的Date字段格式说明及转换方法
一、数值格式说明
你看到的730049036.810926是苹果生态(包含SwiftData、Core Data)专用的日期时间戳格式:
- 起始基准时间为2001年1月1日00:00:00 UTC
- 数值代表从基准时间到目标日期的总秒数(小数部分表示毫秒级精度)
- 和常见的Unix时间戳(以1970年1月1日为基准)不同,这是苹果持久化日期的标准存储方式
二、将"8/17/2023"这类日期转换为该格式的方法
方法1:Swift代码计算(精度可靠)
可以写一段简单的Swift代码生成对应时间戳,直接用于修改SQLite数据:
let targetDateStr = "8/17/2023" let formatter = DateFormatter() formatter.dateFormat = "MM/dd/yyyy" formatter.timeZone = TimeZone(identifier: "UTC") // 保持和SwiftData默认时区一致 if let targetDate = formatter.date(from: targetDateStr) { // 2001-01-01 00:00:00 UTC对应的Unix时间戳 let appleReferenceTimestamp = 978307200.0 let appleTimestamp = targetDate.timeIntervalSince1970 - appleReferenceTimestamp print(appleTimestamp) // 输出结果即可直接写入ZCREATEDAT列 }
如果需要包含具体时分秒,修改dateFormat为"MM/dd/yyyy HH:mm:ss"即可。
方法2:SQLite命令行直接计算
如果不想写代码,也可以在SQLite终端里直接计算:
-- 转换"8/17/2023"为苹果时间戳(注意SQLite日期格式要写成YYYY-MM-DD) SELECT strftime('%s', '2023-08-17') - 978307200;
若要包含时分秒,调整日期字符串为'2023-08-17 14:30:00'即可。
内容的提问来源于stack exchange,提问作者Tony Cheng
相关产品推荐
相关产品推荐

