2016-04-28 13 views
0

私はdueDatesの列を持つタスクのテーブルを持つsqliteデータベースを持っています。明日の日付よりも大きい日付を除外したいだから明日の日付が4月29日の場合は、明日より後で日付を取得する必要があります。2つの日付を比較してください。 Sqlite

これは私が文字列を日付に変換したものです。形式は次のとおりです。

 Calendar calendar = Calendar.getInstance(); 

    dateToday = calendar.getTime(); 
    SimpleDateFormat df = new SimpleDateFormat("d MMM yyyy"); 
    dueDateToday = df.format(dateToday); 

    calendar.add(Calendar.DAY_OF_YEAR, 1); 
    dueTomorrow = calendar.getTime(); 

    dueDateTomorrow = df.format(dueTomorrow); 

とクエリがある:なし日付ありません

public ArrayList<Task> getDueDatesLater(String tomorrow) { 
    ArrayList<Task> conList = new ArrayList<Task>(); 

    String selectQuery = "SELECT * FROM " + TASK_TABLE + " WHERE " + KEY_DUE_DATE + " > '" + tomorrow + "'" ; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    if (cursor.moveToFirst()) { 
     do { 

      Task task = new Task(); 

      task.setId(Integer.parseInt(cursor.getString(0))); 
      task.setTitle(cursor.getString(1)); 
      task.setTaskPriority(Integer.parseInt(cursor.getString(2))); 
      task.setAlertDate(cursor.getString(3)); 
      task.setAlertTime(cursor.getString(4)); 
      task.setDueDate(cursor.getString(5)); 

      task.setDueTime(cursor.getString(6)); 
      task.setList(Integer.parseInt(cursor.getString(7))); 
      task.setStatus(Integer.parseInt(cursor.getString(8))); 

      task.setAlertId(Integer.parseInt(cursor.getString(9))); 

      conList.add(task); 
     } while (cursor.moveToNext()); 
    } 

    return conList; 
} 

が、私はリストを取得しています0として。たぶん私の質問は間違っています。助けてください。

EDIT:推奨されています。

public ArrayList<Task> getDueDatesLater(String tomorrow) { 
    ArrayList<Task> conList = new ArrayList<Task>(); 

    String selectQuery = "SELECT * FROM " + TASK_TABLE ; 

    Date dueDate,tomorrowDate; 
    SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(); 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    try { 
    if (cursor.moveToFirst()) { 
     do { 

      Task task = new Task(); 

      task.setId(Integer.parseInt(cursor.getString(0))); 
      task.setTitle(cursor.getString(1)); 
      task.setTaskPriority(Integer.parseInt(cursor.getString(2))); 
      task.setAlertDate(cursor.getString(3)); 
      task.setAlertTime(cursor.getString(4)); 
      task.setDueDate(cursor.getString(5)); 

      task.setDueTime(cursor.getString(6)); 
      task.setList(Integer.parseInt(cursor.getString(7))); 
      task.setStatus(Integer.parseInt(cursor.getString(8))); 

      task.setAlertId(Integer.parseInt(cursor.getString(9))); 


      dueDate = simpleDateFormat1.parse(task.getDueDate()); 
      tomorrowDate = simpleDateFormat1.parse(tomorrow); 
      if (dueDate.getTime() > tomorrowDate.getTime()) { 
       conList.add(task); 
      } 


      Log.d("laterQuery", selectQuery); 

      //conList.add(task); 
     } while (cursor.moveToNext()); 
    } 
    } 

    catch (ParseException e) { 

    } 

    return conList; 
} 

それでもリストは0

私は後で明日より日数を持っているどのくらいのタスクの数を取得したいそれを返します。

public int getPendingTasksLaterDays(String tomorrow) { 
    ArrayList<Task> conList = new ArrayList<Task>(); 


    String selectQuery = "SELECT * FROM " + TASK_TABLE + " WHERE " + KEY_TASK_STATUS + " = 0"; 
    Date dueDate,tomorrowDate; 
    SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("d MMM yyyy", Locale.ENGLISH); 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor mCount= db.rawQuery(selectQuery,null); 

    if (mCount.moveToFirst()) { 
     do { 

      count = mCount.getInt(0); 
     } while (mCount.moveToNext()); 
    } 

    Log.d("query",selectQuery); 

    Log.d("count",String.valueOf(count)); 
    mCount.close(); 

    return count; 
} 

これを追加するには?

+0

あなたの機能を実現しますDBテーブルに保存? –

+0

形式はd MMM yyyyです。 @ Rohitashv jain –

+0

あなたの日付比較が失敗したかどうかを比較したり、sqliteのクエリを適用する? –

答えて

0

単純にクエリ結果にフィルタを入れることができます。

public ArrayList<Task> getDueDatesLater(String tomorrow) { 
ArrayList<Task> conList = new ArrayList<Task>(); 

String selectQuery = "SELECT * FROM " + TASK_TABLE ; 

SQLiteDatabase db = this.getWritableDatabase(); 
Cursor cursor = db.rawQuery(selectQuery, null); 

try { 
if (cursor.moveToFirst()) { 
    do { 

     Task task = new Task(); 

     task.setId(Integer.parseInt(cursor.getString(0))); 
     task.setTitle(cursor.getString(1)); 
     task.setTaskPriority(Integer.parseInt(cursor.getString(2))); 
     task.setAlertDate(cursor.getString(3)); 
     task.setAlertTime(cursor.getString(4)); 
     task.setDueDate(cursor.getString(5)); 

     task.setDueTime(cursor.getString(6)); 
     task.setList(Integer.parseInt(cursor.getString(7))); 
     task.setStatus(Integer.parseInt(cursor.getString(8))); 

     task.setAlertId(Integer.parseInt(cursor.getString(9))); 


     dueDate = simpleDateFormat1.parse(task.getDueDate()); 
     tomorrowDate = simpleDateFormat1.parse(tomorrow); 
     if (dueDate.getTime() > tomorrowDate.getTime()) { 
      conList.add(task); 
     } 
    } while (cursor.moveToNext()); 
    } 
} 

catch (ParseException e) { 

} 

return conList; 

}

+0

はこの方法で試しました。それでもリストは0を返します。編集したクエストを確認してください。 @Nikhil Borad –

+0

は私とうまく動作します..デバッグする.. –

+0

それは、dueDate = simpleDateFormat1.parse(task.getDueDate())の後にconListを返すように直接ジャンプします。リストはnullを返します。 @Nikhil Borad –

0
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     String to_date = sdf.format(new Date()); 

crs = db.rawQuery(
     "SELECT _id, date_from, date_to, done_or_not, list_name " + 
     "FROM list_tbl " + 
     "WHERE " + 
     "date_from <= Datetime('"+to_date+"') AND date_to >= Datetime('"+to_date+"')", null); 
0

あなたは、データベースから任意の二つの日付を比較したり、日付の形式は、次のいずれかの形式にすることができDBにクエリを適用したい場合:

YYYY-MM-DD 
YYYY-MM-DD HH:MM 
YYYY-MM-DD HH:MM:SS 
YYYY-MM-DD HH:MM:SS.SSS 
YYYY-MM-DDTHH:MM 
YYYY-MM-DDTHH:MM:SS 
YYYY-MM-DDTHH:MM:SS.SSS 
HH:MM 
HH:MM:SS 
HH:MM:SS.SSS 

//クエリ

String selectQuery = "SELECT * FROM " + TASK_TABLE + " WHERE " + KEY_DUE_DATE + " > '" +2016-04-30 + "'" ; 

又は例えば

//メソッド以下
SELECT * FROM test WHERE date BETWEEN "2011-01-11" AND "2011-8-11" 

あなたの日付形式を変更、あなたはUI

// 
/** 
* Change date for mate to original to target date format 
* return formatted date string 
* @param myDate 
* @return String 
*/ 
public static String changeDateFormatIntoYYYYMMDDHHMMSS(String myDate, 
                 String originalDateFormat, 
                 String targetDateFormat){ 
    String formattedDate=""; 
    try { 
     DateFormat originalFormat = new SimpleDateFormat(originalDateFormat);//AppConstant.DATE_FORMAT_FOR_UI); 
     DateFormat targetFormat = new SimpleDateFormat(targetDateFormat);//AppConstant.DATE_FORMAT_FOR_DB); 
     Date date = originalFormat.parse(myDate); 
     formattedDate = targetFormat.format(date); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    return formattedDate; 
} 

// calling Example 
String changeDate= changeDateFormatIntoYYYYMMDDHHMMSS("2016/04/30", DATE_FORMAT_FOR_DB,DATE_FORMAT_FOR_UI); 

// String Formate 
String DATE_FORMAT_FOR_DB="yyyy/MM/dd HH:mm:ss"; 
String DATE_FORMAT_FOR_UI="MMM dd, yyyy hh:mm a"; 

上の別のフォーマットにあなたの日付を表示したい場合は、このコードのヘルプのあなたは内のどの日付形式のタイプあなた

+0

このメソッドを適用しようとしました。しかし、日付文字列は解析されません。 @Rohitashv jain –

+0

日付文字列が解析されないと、データベースやその他のものから日付を取得できないことを意味しますか? –

関連する問題