【问题标题】:Android working with dates and SQLiteAndroid 使用日期和 SQLite
【发布时间】:2015-05-16 02:56:44
【问题描述】:

我正在尝试创建一个简单的提醒应用程序。我只是在逻辑上思考这个过程。基本上我希望能够选择一个日期和时间,例如星期一 15:00,这将触发每个星期一 15:00,直到它从数据库中删除。说了那个例子,我有问题要完成这个过程。

我将如何存储 DAY 和 TIME,什么类型,我的表中需要不同的列? 我如何将实时 DAY 与当前 DAY 进行比较,所以如果它是星期一的实时时间,它只会返回星期一的提醒?这可能吗?

我需要主要使用日历来集中注意力吗?

【问题讨论】:

    标签: android android-fragments android-sqlite android-calendar


    【解决方案1】:

    正如documentation 所说:

    SQLite 没有专门用于存储日期的存储类 和/或时间。相反,SQLite 的内置日期和时间函数能够将日期和时间存储为 TEXT、REAL 或 INTEGER 值。

    您可以将日期和时间存储在TEXT 类型的字段中,格式如下:

    YYYY-MM-DD HH:MM:SS.SSS

    然后使用 SQLite 内置的date & time functions 过滤你的记录。

    另一种选择是将日期和时间存储为以毫秒为单位的时间戳,并编写适当的查询以选择数据或使用 Joda 库进行过滤或日期和时间转换,但可能这种解决方案的效率和便利性不如第一个选项。

    【讨论】:

    • 所以如果我创建,3 列。日,开始时间,结束时间。我可以比较例如,如果 Day 输入是星期一,我可以使用 %Monday% 从 Calendar 对象中将它与当天进行比较吗
    • 我认为,在您的情况下,如果您想访问一周中的几天的记录,许多表示日期和时间的列可能是合理的。您甚至可以存储 1 到 7(或 0 到 6)的数字来表示一周中的几天,并且比存储字符串使用更少的数据库存储空间。
    • 那么我如何将存储在 SQLite 中的日期与当前现实生活中的日期进行比较
    • 如果您不想执行任何额外的转换,您可以将日期和时间存储在一列中,将一周中的天数存储在另一列中。之后,您可以将存储的记录与当前日期进行比较,并快速检索一周中某一天的所有记录。另一种选择是使用内置的 SQLite 日期和时间函数或以毫秒为单位存储时间戳。您始终可以从时间戳中检索任何类型的日期和时间信息(当然可以通过 Java,但也应该可以通过 SQLite - 您可以对此主题进行一些研究)。
    • 好的,我如何将白天时间存储在一个列中并将其与当前日期进行比较,我不能只上传一个字符串日期,例如星期一并调用日历对象来获取当前日期并比较两个字符串如果它匹配带来的数据
    【解决方案2】:

    使用整数列是最简单的解决方案。

    只需以毫秒 (Calendar.getTimeInMillis()) 为单位存储日期即可。

    然后您只需搜索该整数即可在数据库中找到正确的事件:

    String selectQuery = "SELECT whateveryouneed FROM events WHERE date_event > ?";
    Cursor c = db.rawQuery(selectQuery, new String[] { String.valueOf(calendar.getTimeInMillis())});
    ...
    

    如果您需要查找一天的所有事件,您只需找到以毫秒为单位的一天的限制并根据这些限制进行查询

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多