我将日期存储在 Android 的 sqlite 数据库中,如下所示:
initialValues.put(KEY_TIME, time.getTime());
其中 time 是 Date 的实例(具有正确的时间),KEY_TIME 是整数列。
存储后,当我使用如下查询检索它时:
String selectQuery = "SELECT * FROM " + TABLE_NAME + " order by date(" + KEY_TIME + ") DESC" ;
我从来没有先获取最近的数据。
我得到了将近 40 岁的虚假时间。我哪里出错了?
最佳答案
java.util.Date.getTime()
返回自 1970 年(纪元时间)开始以来的毫秒数。 SQLite 可以处理 Unix 纪元时间,这是相同的值,但以秒表示(参见 java.util.Date.getTime()
)。
秒和毫秒不匹配是您看到不正确日期的原因。
您可以将该值除以 1000 以获得 Unix 风格的纪元时间,并为 SQLite 的日期函数指定 'unixepoch' (参见 SQLite Time & Date Functions ),例如:
SELECT date(KEY_TIME / 1000, 'unixepoch') FROM TABLE_NAME
如果您使用java.sql.Date
,它是相同的(该类扩展java.util.Date
)。
但是,正如 323go 在问题评论中提到的那样,只需直接按 KEY_TIME
排序即可,这将为您提供所需的排序顺序。
关于java - 如何在 Android 中从 sqlite 数据库存储和检索日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18192469/