使用时间戳搜索SQLite DB不会返回预期值

时间:2013-12-16 21:32:16

标签: android sqlite time

我有一个Android应用程序,当某些事件发生时,我会将条目写入基本上(在伪代码中)db.putLong(System.currentTimeMillis());的数据库。我正在尝试根据这些时间戳查看数据库。以下代码似乎在lookBackHours为24时有效,但在值达到600或700时返回0。

        long timeStamp = System.currentTimeMillis() - (ONE_MINUTE*60*lookbackHours);
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        Cursor result = db.rawQuery("SELECT * FROM WorkLog WHERE dutyDayStart>="+timeStamp, null);
        result.moveToFirst();
        int count = result.getCount();

public static final int ONE_MINUTE = (60*1000);

逻辑是:使用timeInMillis标记记录。要查找时间范围内的记录,找到当前时间,减去一定数量的hours*millisPerHour(我感兴趣的最远的记录),返回时间戳为>的值。我感兴趣的最远的记录。我不明白为什么它不能正常工作。

2 个答案:

答案 0 :(得分:1)

你说的很长,但我猜你从dB读取int? (没有为该部分提供代码)。 600-700 lookbackhours命中你可以存储在32位int的最大值,这就是你回来的原因。

答案 1 :(得分:0)

也许是溢出。

int ONE_MINUTE更改为long ONE_MINUTE
Cange ONE_MINUTE*60*lookbackHoursONE_MINUTE*60L*lookbackHours
确保lookbackHours很长