And*_*tus 4 java sqlite android
java.time.OffsetDateTime我正在寻找在 SQLite 数据库中存储 a 的最佳方法(在 Android 上,如果有帮助的话)。
出现这个问题是因为 SQLite 没有日期+时间的本机数据类型。
标准是我应该能够从以下方面产生合理的结果:
BETWEEN或范围,WHERE目前我将时间戳存储为 ISO 格式的字符串。不确定这对于效率或比较来说是否理想。
也许可以选择转换为 UTC,然后转换为 long (Java),但我在 OffsetDateTime 中找不到返回自纪元以来的时间的函数(例如,Instant.ofEpochMilli)。
我应该提到的是,数据是在 Android 设备上存储和使用的。应用程序代码使用时间戳并执行简单的算术,例如“自某个事件以来过去了多少天”。因此数据正在存储类型和OffsetDateTime之间进行转换。
将日期时间存储为 ISO 8601 字符串(例如 2017-06-11T17:21:05.370-02:00)。SQLite 具有日期和时间函数,可对此类字符串(时区感知)进行操作。
类java.time.OffsetDateTime可从 API 26 获取,因此我建议您使用 ThreeTenABP 库。
下面的例子:
private val formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME
val datetime = OffsetDateTime.now()
//###### to ISO 8601 string (with time zone) - store this in DB
val datetimeAsText = datetime.format(formatter)
//###### from ISO 8601 string (with time zone) to OffsetDateTime
val datetime2 = formatter.parse(datetimeAsText, OffsetDateTime::from)
Run Code Online (Sandbox Code Playgroud)
为了使 SQL 查询了解时区,您需要使用 SQLite 中内置的日期和时间函数之一,例如,如果您想按日期和时间排序,您将使用datetime()函数:
SELECT * FROM cars ORDER BY datetime(registration_date)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2712 次 |
| 最近记录: |