java - 如何在 Android 中从 sqlite 数据库存储和检索日期?

标签 java android datetime

我将日期存储在 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/

相关文章:

java - 如何在微调器之间传递选定的微调器项目?

android - 在其他 Activity 中传递 Mediaplayer

javascript - 如何将日期组件数组转换为 JavaScript 日期对象?

r - 如何将Excel日期格式转换为R中的正确日期

java - 如何获取用于函数及其类的注释类型的所有注释属性?

java - 如何在没有 arraycopy 的情况下使用 byte[] 的一部分?

java - 如何使垂直滚动条不可见?

java - 错误后如何重新启动应用程序?

java - 如何在 Java 中获取当前日期/时间

java - 莫名其妙的空指针异常