2016-03-04 3 views
0

У меня есть две даты. Первая - текущая дата, а другая - 30 дней назад. Поэтому мне нужно получить данные между этими двумя датами в Green Dao. Но я не получаю результата.Как получить данные между 2 датами в базе данных greenDao

MyCode:

Date startRangeDate = new Date(); 
Date endRangeDate = dateBefore30Days; 
QueryBuilder<StructSamePage> qb = UserDao.queryBuilder(); 
qb.where(UserDao.Properties.dateTime.between(startRangeDate.getTime(), endRangeDate.getTime())); 
List<StructSamePage> list = qb.list(); 

ответ

0

WhereCondition между в GreenDao использует это:

/** Creates an "BETWEEN ... AND ..." condition for this property. */ 
public WhereCondition between(Object value1, Object value2) { 
    Object[] values = { value1, value2 }; 
    return new PropertyCondition(this, " BETWEEN ? AND ?", values); 
} 

Таким образом, вы должны просто изменить свои даты соответственно. Потому что вы используете сейчас первый и день за 30 дней до позже ваш код будет сделать это:

Value >= NOW AND Value <= 30 DAYS BEFORE 

Если вы используете фактические даты Wich greenDAO не использует! Ваш код будет выглядеть так:

today = 2016-03-04 
30DaysAgo = 2016-02-03 

WHERE dateTime >= 2016-03-04 AND dateTime <= 2016-02-03 

Таким образом, вы должны быть в порядке, если просто измените свой заказ.

Если вы хотите узнать больше о том, как BETWEEN работ вы можете прочитать this

слова советов: greenDao использует временные метки, как целочисленные в базе данных, так что если вы используете Java Дату вы получаете Дату, который также имеет время (когда он был создан), если вы просто удалите 30 дней из него, вы не включите весь день 30 дней назад, а только день с момента создания объекта текущей даты. Поэтому, возможно, вы хотите создать дату из календаря без какого-либо времени.

0

Попробуйте поменять даты.

Date startRangeDate = new Date(); 
Date endRangeDate = dateBefore30Days; 
QueryBuilder<StructSamePage> qb = UserDao.queryBuilder(); 
qb.where(UserDao.Properties.dateTime.between(endRangeDate.getTime(),startRangeDate.getTime() )); 
List<StructSamePage> list = qb.list(); 

Вообще между работает, если левая сторона значение меньше, чем с правой стороны