【问题标题】:How to compare timestamp (long milisecond ) value to sqlite database in android如何在android中将时间戳(长毫秒)值与sqlite数据库进行比较
【发布时间】:2017-12-14 22:27:55
【问题描述】:

我在 SQLite 数据库中有一个名为 message 的表,该表包含 message_date 列。我需要 7 天前插入的数据。我无法比较日期,因为 message_date 存储为毫秒长值 我的书面查询是:

 Cursor cursor = db.rawQuery("SELECT csId FROM table_messages WHERE date < date('now','-7 days') ", null);

任何人都可以更正我的查询

【问题讨论】:

    标签: android sql sqlite android-sqlite


    【解决方案1】:

    您可以使用> 6天前和

    Calendar sixDaysAgo = Calendar.getInstance();
            sixDaysAgo.add(Calendar.DATE, -6);
            long millis6Days = sixDaysAgo.getTimeInMillis();
    
            Calendar sevenDaysAgo = Calendar.getInstance();
            sevenDaysAgo.add(Calendar.DATE, -7);
            long millis7Days = sevenDaysAgo.getTimeInMillis();
    
            Cursor cursor = db.rawQuery(
                    "SELECT csId FROM table_messages WHERE date > " + String.valueOf(millis6Days) + " AND date < " + String.valueOf(millis7Days), null);
    

    【讨论】:

    • 我有一个名为 table_message 的表。此表包含 4 列 msg_id、内容、日期、csid,我需要 7 天前发送的记录。我不能给你简单的数据 cz 我没有任何根设备。日期库是一个整数列,其中包含以毫秒为单位的时间
    • 您的日期列是否以时间戳格式保存?您能否查询全部并将其打印为日志以查看它的类型,然后进行精确比较。超过 7 天只是比较日期的值 > milisecond7Days
    • 是日期列保存在时间戳格式中,例如:933424234 像这样。
    • 看到这个投票,我认为它对你的情况很有用:stackoverflow.com/questions/2930768/…
    【解决方案2】:

    您可以从 Date().getTime() 或 System.currentTimeMillis() 中获取毫秒值,两者都将返回“当前时间与 UTC 1970 年 1 月 1 日午夜之间的差异,以毫秒为单位。”

    获取前 7 天的时间戳。试试这个 -

    Calendar current = Calendar.getInstance();
    current.add(Calendar.DATE, -7);
    long millis = current.getTime().getTime();//Change this line
    
    Cursor cursor = db.rawQuery(
        "SELECT csId FROM table_messages WHERE date < " + String.valueOf(millis), null);  
    

    编辑:您会看到第二行代码,您可以根据需要添加减去天数并从日历对象中提取毫秒数并在查询中使用它

    编辑 2:
    1. current.add(日历.DATE, -7);这里 -7 表示您从今天减去 7 天。您可以将其设为 -3​​0(减去 30 天)或仅 30(添加 30 天)表示尝试更改值,因为您查询的表可能没有任何符合条件的记录。

    2.从表中选择所有行并将其打印在 logcat 上并打印您从日历中获得的毫秒数,手动匹配您从日历中获得的毫秒数是否存在于表中。

    3.替换这一行 long millis = current.getTimeInMillis(); with long millis = current.getTime().getTime();

    4.如果遇到错误,请发布错误消息

    如果这解决了您的问题,请将此帖子标记为答案。

    【讨论】:

    • 您提交的查询是否适用于 7 天前的数据? @Rahul
    • 你明白我的问题吗?我正在搜索一个查询,该查询将找到 7 天前插入的插入记录。
    • 最新查询不返回任何内容
    • 您不能只对 SQLite 说“给我 7 天前插入的记录”。您说您的 sqlite 数据库将日期存储为毫秒,我给出了获取毫秒并进行比较的解决方案。请发布您的表格数据,他们可能对您有帮助
    • 对不起。我有一个名为 table_message 的表。此表包含 4 列 msg_id、内容、日期、csid,我需要 7 天前发送的记录。我不能给你简单的数据 cz 我没有任何根设备。日期库是一个整数列,其中包含以毫秒为单位的时间
    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多