You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQLite数据库中存入LocalDate类型数据?

解决Kotlin中LocalDate存入SQLite的问题

SQLite本身没有原生日期类型,且ContentValues的put方法不直接支持LocalDate类型,因此需要先将LocalDate转换为SQLite兼容的类型再存入,以下是两种常用方案:

方案一:转换为ISO标准字符串存储

将LocalDate转为yyyy-MM-dd格式的字符串(LocalDate.toString()默认就是该格式),存入SQLite的TEXT类型列:

存入代码

val values = ContentValues().apply {
    put(COLUMN_START_DAY, pillola.startDay.toString())
}

读取代码

从Cursor中取出字符串后解析回LocalDate:

val startDayStr = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_START_DAY))
val startDay = LocalDate.parse(startDayStr)

优势:可读性强,SQLite可直接对该字符串进行日期排序、比较等操作(ISO格式的字符串字典序与时间序一致)。

方案二:转换为Epoch Day存储

将LocalDate转为从1970-01-01开始计算的天数(Epoch Day),以Long类型存入SQLite的INTEGER类型列:

存入代码

val values = ContentValues().apply {
    put(COLUMN_START_DAY, pillola.startDay.toEpochDay())
}

读取代码

从Cursor中取出数值后转换回LocalDate:

val epochDay = cursor.getLong(cursor.getColumnIndexOrThrow(COLUMN_START_DAY))
val startDay = LocalDate.ofEpochDay(epochDay)

优势:存储占用空间更小,日期计算操作更高效。

注意事项

  • 需确保数据库表中COLUMN_START_DAY对应的列类型与转换后的类型匹配:字符串对应TEXT,数值对应INTEGER。

内容的提问来源于stack exchange,提问作者genespos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:52:07