看看这里的函数。格式显示可用于毫秒 (0.001) 的小数秒,但它是否精确到毫秒?我无法在任何文档中找到这些呼叫的解决方案。
https://www.sqlite.org/datatype3.html#section_2_2
SQLite 没有为存储日期预留的存储类和/或时间。相反,SQLite的内置日期和时间函数能够将日期和时间存储为文本、实数或整数值:
文本作为ISO8601字符串("YYYY-MM-DD HH:MM:SS.SSS")。
REAL 作为儒略日数字,自 11 月格林威治中午以来的天数公元前24年4714年,根据公历
。INTEGER 作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。应用程序可以选择在其中任何一个中存储日期和时间格式并使用内置日期和时间函数。
看来您可以使用ISO8601字符串达到最高分辨率。这些字符串的准确性应该没有问题,只要您不混合存储表示。
这取决于日期格式。
整数精确到秒。
文本值精确到毫秒。您可以在秒的小数部分字段中指定更多数字,但内置函数将忽略前三个之后的所有数字。
儒略日数字的分辨率优于毫秒,但在格式化它们时,内置函数不会输出超过三个小数位数。
如果要以比日期和时间函数允许的分辨率更高的分辨率存储时间值,则可以选择INTEGER存储,但转换函数等需要您自己。
以高达纳秒的精度存储 unix 纪元时间戳将涵盖从 1970 年到最少 2262 年(如果为纳秒)的日期。您可以自己与 ISO 日期字符串和时间单位相对算术进行转换,但如果您对此感到满意,那么您将拥有快速、高精度和紧凑的存储格式。
我有一个系统,它以纳秒为单位的速率从设备接收传感器值,因此对这些时间戳进行存储和索引非常有帮助。我确实必须提供一个查询接口,从ISO,Python datetime
和其他格式转换为ns并返回,但这就是交易。
使用 8 字节时间戳有助于缩短记录长度,并具有快速插入和查询功能。