0

我在 Android 设备上的 SQLite 中有这张表:

CREATE TABLE IF NOT EXISTS MEN(_id INTEGER PRIMARY KEY AUTOINCREMENT,
                               Tdate date, Weight float, Total float, BMI float);

我以这种日期格式插入数据(31/05/2011 22:34)

String Tdate = android.text.format.DateFormat.format("dd/MM/yyyy k:mm", new java.util.Date()); 

   SQL = "insert into MEN (Tdate,Weight,Total,BMI) values ('";
   SQL += Tdate + "','" + ThisWeight + "','" + Total + "','" + BMI+ "')"; 

我运行这样的查询:

SELECT _id,Tdate,Weight,Total,BMI FROM MEN ORDER BY Tdate desc

但我看到数据没有排序:

31/05/2013 22:20
31/05/2013 19:06
29/04/2013 17:33
02/06/2013 19:25
02/06/2013 19:24
4

1 回答 1

3

到目前为止的评论部分正确 - SQLite 并不真正支持 Date 类型。

虽然人们通常建议将您的日期存储为文本,例如“YYYY-MM-DD HH:MM:SS.SSS”,但这并不涉及时区,除非您也将其包含在字符串格式中。如果您不指定时区,SQLite 函数将使用 UTC,这可能不是您所期望的。

我相信最好的解决方案(除非您需要毫秒精度)是存储一个包含 Unix 纪元时间的整数(自 1970 年 1 月 1 日午夜 UTC 以来的秒数)。SQLite 日期函数直接支持这一点。

如果您需要毫秒,我会考虑将日期存储为 Java Epoch 时间(自 1970 年 1 月 1 日午夜 UTC 以来的毫秒数) - Unix epoch 大约是 Java Epoch / 1000。但是,在这种情况下,如果您使用 SQLite函数,使用它们时必须除以 1000,并且会丢失毫秒精度。

http://www.sqlite.org/datatype3.htmlhttp://www.sqlite.org/lang_datefunc.html

PS 要非常小心SQL 注入漏洞 - 您应该绑定参数而不是将它们连接到 sql 语句中。

于 2013-06-02T17:48:40.047 回答