在SQLite select语句中将整数格式化为格式化日期

我的Android应用程序中有一个SQLite数据库,它将日期存储为整数。 这些整数派生自对Java.util.Date.getTime();的调用Java.util.Date.getTime(); 。 我正在尝试运行我的数据库的原始查询以获取Cursor传递给CursorAdapter并在ListView中显示,但日期存储为getTime()返回的整数。

为了简化我的程序,我想避免使用SimpleArrayAdapter,并坚持使用CursorAdapter。

以某种方式可以将日期列中的整数格式化为mm-dd-yyyy以便光标所指向的表的列包含格式正确的值,而不是Java.util.Date.getTime();返回的整数。 Java.util.Date.getTime(); 当我将项目添加到数据库?

 SELECT strftime("%m-%d-%Y", date_col, 'unixepoch') AS date_col 

如果期望以该格式称为date_col的结果集列,则代码将起作用。

编辑:你需要注意的一件事是getTime使用自1970年以来的毫秒,而标准的UNIX时间(包括SQLite)使用秒。

Java.util.Date.getTime(); method返回一个表示“ unix time ”的整数。

将此数字作为日期读取的最简单方法是将其按原样存储,并使用以下Sqlite查询读取它:

 SELECT strftime('%m-%d-%Y', 1092941466, 'unixepoch'); 

返回:

 08-19-2004 

如果您需要其他格式,可以使用strftime函数进行格式化,也可以使用任何其他日期格式和函数。

正如Matthew Flaschen在下面的推荐中指出的那样,你必须将日期除以1000才能以这种方式使用它们。 “真实”的unix时间是以纪元为单位的秒数,以及Java.util.Date.getTime(); 返回自纪元以来的毫秒数

SQLite使用静态刚性types。 使用静态types时,值的数据types由其容器(存储值的特定列)确定。

存储在SQLite数据库中的任何值都具有以下存储类之一:

  1. 空值
  2. 整数
  3. 真实
  4. 文本
  5. BLOB

所以我不确定你的意思, but the date is stored as a long, unhelpful integer.

有关更多详细信息,请参阅SQLite版本3中的数据types 。 有关在SQLite中存储日期/时间的更多信息,请参阅SQLite理解的SQL

我希望这有帮助。