Android SQlite:从今天开始按日期范围查询表格行?

时间:2017-07-03 11:19:38

标签: android sql sqlite android-sqlite android-contentprovider

我从服务器获得了一个日期" MM / dd / yyy" form,然后我使用以下函数将其转换为毫秒:

public static long getSimpleDateToMillis(String simpleDate) throws ParseException {
        SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
        Date date = formatter.parse(simpleDate);
        return date.getTime();
}

然后我将结果作为int保存到数据库中。

现在我被困在对我来说似乎是死路一条。我无法通过搜索和我的库存知识找到一种方法,可以通过project_date列过滤我的cursorloader,该列在数据库中保存为整数。

我能用什么方式查询它会: 从项目表中选择所有行,其中project_date是今天和后退(昨天等等)。

我试过这个,但似乎真的不是答案。

String [] projection = new String []{};
        String selection = "datetime("+ ProjectsEntry.COLUMN_PROJECT_DATE + "/1000, 'unixepoch') =? ";
        String [] selectionArgs = new String[]{" date('now')"};
        return new CursorLoader(this,
                JobsContract.JobsEntry.CONTENT_URI,
                projection,
                selection,
                selectionArgs,
                null);

我还没有找到任何其他可以指向我的参考资料,所以我希望有人也许也会遇到这个问题。

1 个答案:

答案 0 :(得分:0)

这就是我做类似的事情,但使用完整的时间戳,即长而不是int。

首先我有这个方法来获取TimeStamp,以获得今天午夜时间的日期/时间(1毫秒): -

/**
 *
 * @return  1 millsecond before midnight today
 */
private long getDateTimeOfAllofToday() {
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.DAY_OF_MONTH,1); // tomorrow
    cal.set(Calendar.MILLISECOND,0);
    cal.set(Calendar.SECOND,0);
    cal.set(Calendar.MINUTE,0);
    cal.set(Calendar.HOUR_OF_DAY,0);
    cal.add(Calendar.MILLISECOND,-1);
    return cal.getTimeInMillis();
}

然后我创建相应的where子句,例如: -

filter = DBRulesTableConstants.RULES_ACTON_COL +
        " <= " +
        Long.toString(getDateTimeOfAllofToday());

这是通过rawQuery使用的,所以不完全是你想要的,但很容易将" <= "更改为" <=?"然后使用  String [] selectionArgs = new String[]{Long.toString(getDateTimeOfAllofToday())};或修改后的版本以获取整数。