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

Android 在SQLite select语句中将整数格式化为格式化日期,android,sqlite,Android,Sqlite,我的Android应用程序中有一个SQLite数据库,它将日期存储为整数。这些整数来自对Java.util.Date.getTime()的调用。我正在尝试运行数据库的原始查询,以获取要传递给游标适配器并显示在ListView中的游标,但日期存储为整数,由getTime()返回 为了保持程序的简单,我希望避免使用SimpleArraAdapter,而坚持使用CursorAdapter 是否可以将日期列中的整数格式化为mm dd yyyy,以便光标指向的表列包含正确格式化的值,而不是Java.uti

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

为了保持程序的简单,我希望避免使用SimpleArraAdapter,而坚持使用CursorAdapter


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

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

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

  • 空的
  • 整数
  • 真实的
  • 正文
  • 斑点
  • 因此,我不确定您所说的
    是什么意思,但日期存储为一个长而无用的整数。

    有关更多详细信息,请参阅。有关在SQLite中存储日期/时间的更多信息,请参阅


    我希望这能有所帮助。

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

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

    08-19-2004
    
    如果您需要另一种格式,您可以使用该函数按自己的喜好格式化,或使用任何其他可用的日期格式和函数

    正如马修·弗莱森(Matthew Flaschen)在下面的一篇文章中指出的那样,你必须将日期除以1000,然后才能这样使用它们。“真实的”unix时间是从纪元开始以秒为单位测量的,
    Java.util.Date.getTime()返回从历元开始的毫秒数

    SELECT strftime("%m-%d-%Y", date_col, 'unixepoch') AS date_col
    
    如果您的代码需要一个名为date\u col的结果集列,那么它就可以工作


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

    为什么不使用日历方法,然后您可以格式化日期,但您可以随意选择。我不知道是选择Matthew Flaschen还是Ezra的答案作为最佳答案,因为它们都是完全正确的。谢谢你们的帮助。我不明白你们上面的选择声明中的“1092941466”是什么。我不希望这是包含日期的列的名称吗?是的。没什么特别的;只是一些unix风格的日期,需要在我的系统上测试该示例。在查询中,您希望将其替换为相应的列。确定。这很有意义,格式化日期的列是否与存储日期的列同名,或者是否有其他名称?现在,我的应用程序在试图显示此信息时似乎崩溃了,因为rawQeury返回的游标表中不存在名为my date column的列。由@Matthew Flaschen提供的答案解决了这个问题。非常感谢你的帮助。我现在遇到一个问题,即strft总是返回01-01-1970,即使数据库中的日期不同。(例如,一个是6125804640000。)
    getTime
    与UNIX时间不完全相同,因为它使用毫秒。好的,我的想法是将该值作为Date.getTime()/1000存储到数据库中,但是这个日期是从strftime返回的,+1900。例如,使用new Date()存储的内容。getTime()/1000(今天)显示为03-12-3911而不是03-12-2011,my/1000逻辑是否存在某种缺陷?@segfault,可能您只是创建了
    Date
    对象。你需要进入(或设置)年份减去1900