Java 如何在Android中存储和检索sqlite数据库中的日期?

Java 如何在Android中存储和检索sqlite数据库中的日期?,java,android,datetime,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" ; 我从来没有先得到最近的数

我将日期存储在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历元时间,它是相同的值,但以秒表示(请参阅)

秒和毫秒的不匹配是您看到错误日期的原因

您可以将该值除以1000以获得Unix风格的纪元时间,并为SQLite的日期函数指定“unixepoch”(请参阅),例如:

SELECT date(KEY_TIME / 1000, 'unixepoch') FROM TABLE_NAME
如果您使用的是
java.sql.Date
,则是相同的(该类扩展了
java.util.Date


但是,正如问题注释中提到的,只需直接按
键时间进行排序即可,这将为您提供所需的排序顺序。

sqlite日期和Java日期不是一回事。您以谁都知道的格式存储一个日期字段,然后在SQL中计算它是一个ISO8601时间字符串。将时间戳存储为字符串,首选ISO8601,但任何可排序的(yyyymmdd)都可以。考虑到我的格式更多的是yyyy-MM-dd'HH:MM:ss.SSS'Z'如何实现这一点?只需按“+KEY\u TIME
排序并忘记日期即可。不过,您的格式看起来是ISO8601。