Android 带有时间戳的ContentResolver查询
如果当前日期和dealdate之间的差异小于15分钟,则必须运行该服务 我有一个DBHelper类,用于创建表:Android 带有时间戳的ContentResolver查询,android,android-sqlite,android-contentresolver,Android,Android Sqlite,Android Contentresolver,如果当前日期和dealdate之间的差异小于15分钟,则必须运行该服务 我有一个DBHelper类,用于创建表: public class ToDoDBHelper extends SQLiteOpenHelper { private final int DATABASE_VERSION = 1; private ArrayList<ToDoClass> todoitems; private final String DATABASE_NAME = "deals.db"; pu
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);
}
但我不知道如何写选择。在所选内容中,我需要获得ToDoDatabase.ToDoDatabaseEntry.start\u dealDate\u列和currentDate之间的差异
请帮助您可以试试这个
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");
长十五分钟=15*60*1000;
字符串日期=System.currentTimeMillis()-十五分钟;
Cursor Cursor=context.getContentResolver().query(
ToDoDatabase.ToDoDatabaseEntry.CONTENT\u URI,
无效的
ToDoDatabase.ToDoDatabaseEntry.start_dealDate_column+“@shryans Gautam感谢您的回答。
我找到了问题的解决方案。现在我正在使用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");
也许我必须将日期转换为时间戳:String date=“1410293471300”;String[]selectionArgs=new String[]{date};我已经在我的答案new String[]{date}中给你了这很奇怪。如果我检查ToDoDatabase.ToDoDatabaseEntry.start\u dealDate\列的值,返回的值像1410293471300,与timestampformat中的值不一样。所以我必须这样:Date curDate=New Date();String Date=String.valueof(curDate.getTime());Cursor Cursor=context.getContentResolver().query(ToDoDatabase.ToDoDatabaseEntry.CONTENT_URI,null,ToDoDatabase.ToDoDatabaseEntry.start_dealDate_column+)这在@Renat Ahmetshin有效吗?请参阅更新的答案
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");