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

时间:2011-03-13 02:48:16

标签: android sqlite

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

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

是否有可能将日期列中的整数格式化为mm-dd-yyyy,以便光标所指向的表的列包含格式正确的值,而不是{{返回的整数'。 1}}当我将项目添加到数据库中时?

3 个答案:

答案 0 :(得分:9)

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

如果您的代码需要一个名为date_col的格式的结果集列,那么您的代码将会正常工作。

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

答案 1 :(得分:5)

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

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

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

返回:

08-19-2004

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

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

答案 2 :(得分:2)

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

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

  1. NULL
  2. INTEGER
  3. REAL
  4. TEXT
  5. BLOB
  6. 因此我不确定but the date is stored as a long, unhelpful integer.

    的含义

    有关详细信息,请参阅 Datatypes In SQLite Version 3 。有关在SQLite中存储日期/时间的更多信息,请参阅 SQL As Understood By SQLite

    我希望这会有所帮助。