2017-09-12 92 views
0

如果当前日期和dealdate之间的差小于15分钟,我必须运行服务。带时间戳的ContentResolver查询

我有创建表DBHelper类:

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

} 

}

和我有ContentResolver的查询在至极,我想使用的选择标准:

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

但我不知道如何编写选择。在选择中,我需要区分ToDoDatabase.ToDoDatabaseEntry.start_dealDate_column和currentDate。

请帮

回答

0

你可以试试这个

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

如果你的情况的值存储在时代在SQLite数据库,那么你可以做到这一点

 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

谢谢你的回答。 –

+0

这对你有用@Renat Ahmetshin? –

+0

也许我必须将日期转换为时间戳: String date =“1410293471300”; String [] selectionArgs = new String [] {date}; –

0

@Shriyansh高塔姆感谢您的回答。 我找到了我的问题的解决方案。现在我正在使用SQLiteDatabase类的查询方法。这是我的代码,它适用于我。

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