如何在SQLite中存储日期值?WinForms开发相关技术问题
SQLite 存储 DateTime 类型数据实现方案
SQLite 本身没有内置的 DateTime 数据类型,针对你的 WinForms 开发场景,入门级开发者可以选择以下两种易实现的通用方案:
方案1:ISO 8601 文本存储(首选,入门友好)
将 DateTime 格式化为固定格式的字符串存储到 SQLite 的 TEXT 类型字段中,调试时直接查看数据库就能识别日期内容,上手成本极低。
- 存储转换代码(C#):
// invoice是你的类实例,InvoiceDate为DateTime类型属性 string saveDate = invoice.InvoiceDate.ToString("yyyy-MM-dd HH:mm:ss"); // 后续将saveDate作为参数插入到数据库对应字段即可 - 读取转换代码(C#):
// 从SQLite读取到的日期字符串转回到DateTime类型 invoice.InvoiceDate = DateTime.Parse(reader["invoice_date"].ToString());
方案2:Unix 时间戳存储(适合日期计算/排序场景)
将 DateTime 转换为整数类型的 Unix 时间戳(从1970-01-01 00:00:00 UTC到目标时间的秒数/毫秒数),存储到 SQLite 的 INTEGER 类型字段中,日期比较、排序、计算差值的效率更高。
- 存储转换代码(C#):
long timeStamp = new DateTimeOffset(invoice.InvoiceDate).ToUnixTimeSeconds(); // 后续将timeStamp作为参数插入到数据库对应字段即可 - 读取转换代码(C#):
invoice.InvoiceDate = DateTimeOffset.FromUnixTimeSeconds((long)reader["invoice_date"]).DateTime;
配套表创建示例(以方案1为例)
CREATE TABLE invoices ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- 其他你需要的字段,比如发票号、金额等 invoice_date TEXT NOT NULL );
额外优化建议
如果不想手动写类型转换代码,可以引入轻量ORM库 Dapper 操作 SQLite,库会自动完成 DateTime 类型和 SQLite 存储类型的双向转换,进一步降低开发成本。
内容的提问来源于stack exchange,提问作者Talha Haroon
相关产品推荐
相关产品推荐

