2017-09-12 3 views
0

J'ai un service qui doit s'exécuter si la différence entre la date actuelle et traiter moins de 15 minutes.Requête ContentResolver avec horodatage

J'ai la classe DBHelper qui crée la table:

public class ToDoDBHelper extends SQLiteOpenHelper { 

private final int DATABASE_VERSION = 1; 
private ArrayList<ToDoClass> todoitems; 

private final String DATABASE_NAME = "deals.db"; 

public ToDoDBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
    super(context, name, factory, version); 
} 


@Override 
public void onCreate(SQLiteDatabase sqLiteDatabase) { 

    final String Create_Table_Query = "CREATE TABLE "+ ToDoDatabase.ToDoDatabaseEntry.TABLE_NAME+" ("+ 
    ToDoDatabase.ToDoDatabaseEntry._ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+ 
      ToDoDatabase.ToDoDatabaseEntry.start_dealDate_column+" TIMESTAMP ,"+ 
      ToDoDatabase.ToDoDatabaseEntry.end_dealDate_column+" TIMESTAMP ,"+ 
      ToDoDatabase.ToDoDatabaseEntry.shortdescription_column+" TEXT NOT NULL ,"+ 
      ToDoDatabase.ToDoDatabaseEntry.fulldescription_column+" TEXT NOT NULL "+");"; 
    sqLiteDatabase.execSQL(Create_Table_Query); 

} 

@Override 
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS "+ToDoDatabase.ToDoDatabaseEntry.TABLE_NAME); 
    onCreate(sqLiteDatabase); 

} 

}

et j'ai requête ContentResolver dans wich je veux utiliser des critères de sélection:

Cursor cursor = context.getContentResolver().query(
      ToDoDatabase.ToDoDatabaseEntry.CONTENT_URI, 
      null, 
      selection, 
      null, 
      ToDoDatabase.ToDoDatabaseEntry.start_dealDate_column+" DESC"); 

Mais je ne sais pas comment écrire la sélection. Dans la sélection, j'ai besoin de faire une différence entre ToDoDatabase.ToDoDatabaseEntry.start_dealDate_column et currentDate.

S'il vous plaît aider

Répondre

0

Vous pouvez essayer cette

 long FIFTEEN_MINUTES = 15*60*1000; 
     String dateFormatSQLite = "yyyy-MM-dd HH:mm:ss"; //verify timestamp format in your case 
     String timezone = "GMT+0.00"; //use your timestamp 
     SimpleDateFormat sdf = new SimpleDateFormat(dateFormatSQLite); 
     sdf.setTimeZone(TimeZone.getTimeZone(timezone)); 
     String date = sdf.format(new Date(System.currentTimeMillis() - FIFTEEN_MINUTES)); 

Si dans votre cas, la valeur est stockée dans une époque dans votre base de données SQLite alors vous pouvez le faire

 long FIFTEEN_MINUTES = 15*60*1000; 
     String date = System.currentTimeMillis() - FIFTEEN_MINUTES; 


     Cursor cursor = context.getContentResolver().query(
     ToDoDatabase.ToDoDatabaseEntry.CONTENT_URI, 
     null, 
     ToDoDatabase.ToDoDatabaseEntry.start_dealDate_column+" <= ?", 
     new String[]{date}, 
     ToDoDatabase.ToDoDatabaseEntry.start_dealDate_column+" DESC"); 
+0

merci pour la réponse. –

+0

cela a-t-il fonctionné pour vous @Renat Ahmetshin? –

+0

Peut-être que je dois convertir la date en horodatage: String date = "1410293471300"; Chaîne [] selectionArgs = new Chaîne [] {date}; –

0

@Shriyansh Gautam Merci pour votre réponse. J'ai trouvé la solution de mon problème. Maintenant j'utilise la méthode de requête de la classe SQLiteDatabase. Voici mon code, et ça marche pour moi.

Date curDate = new Date(); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTime(curDate); 
    calendar.set(Calendar.MINUTE, (calendar.get(Calendar.MINUTE)+15)); 


    String selection = ToDoDatabase.ToDoDatabaseEntry.start_dealDate_column+" >= ?"; 
    String [] selectionArgs = {String.valueOf(calendar.getTimeInMillis())}; 

    String notifText = null; 
    ToDoDBHelper toDoDBHelper = new ToDoDBHelper(context,"deals", null, 1); 
    SQLiteDatabase sqLiteDatabase = toDoDBHelper.getWritableDatabase(); 

    Cursor cursor = sqLiteDatabase.query("deals", 
      null, 
      selection, 
      selectionArgs, 
      null, 
      null, 
      ToDoDatabase.ToDoDatabaseEntry.start_dealDate_column+" ASC");