Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android上运行SQLite时出现意外结果_Android_Sqlite_Date - Fatal编程技术网

在Android上运行SQLite时出现意外结果

在Android上运行SQLite时出现意外结果,android,sqlite,date,Android,Sqlite,Date,我在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) 我运行如下查询: SELECT _id,Tdate,Weight,Total,BM

我在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)

我运行如下查询:

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

到目前为止,注释部分是正确的-SQLite实际上不支持日期类型

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

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

如果需要毫秒,我会考虑将日期存储为java时代(从UTC 01, 1970以来的毫秒数)-Unix EngCH大约是java时代/ 1000。但是,在这种情况下,如果使用SQLite函数,则在使用它们时必须除以1000,并且会丢失毫秒精度

看到和


注意,要特别小心漏洞-您应该绑定参数,而不是将它们连接到sql语句中。

到目前为止的注释部分正确-SQLite并不真正支持日期类型

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

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

如果需要毫秒,我会考虑将日期存储为java时代(从UTC 01, 1970以来的毫秒数)-Unix EngCH大约是java时代/ 1000。但是,在这种情况下,如果使用SQLite函数,则在使用它们时必须除以1000,并且会丢失毫秒精度

看到和


注意,要特别小心漏洞-你应该绑定你的参数,而不是将它们连接到sql语句中。

insert命令将非常有用SQLite没有任何
Date
datatype!!!!!我弄错了吗@samrad是正确的sqlite不支持日期数据类型。因为sqlite没有日期类型,
date
列的类型是
TEXT
,所以结果按字母顺序排序。最简单的解决方案是将日期格式更改为“YYYY-MM-DD HH:MM:SS.SSS”,如果可能的话。insert命令将非常有用SQLite没有任何
date
datatype!!!!!我弄错了吗@samrad是正确的sqlite不支持日期数据类型。因为sqlite没有日期类型,
date
列的类型是
TEXT
,所以结果按字母顺序排序。如果可能的话,最简单的解决方案是将日期格式更改为类似“YYYY-MM-DD HH:MM:SS.SSS”的格式。
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