2017-07-03 99 views
0

我从在“MM/DD/YYY”的形式与服务器的日期,然后我把它转换成使用下面的函数毫秒:Android SQlite:按日期范围向后查询表格行?

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); 

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

+0

“datetime(”+ ProjectsEntry.COLUMN_PROJECT_DATE +“/ 1000,'unixepoch')''<''=?你试过”小于或等于“? – Grisgram

+0

@Grisgram不起作用。 –

回答

0

这是我如何做一些非常相似的事情,但使用完整的时间步长即long而不是int。

首先,我有这样的方法来获取时间戳,让今天的日期/时间为午夜(巴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())};或修改版本,以获得整数。