【问题标题】:ContentResolver query with timestamp带有时间戳的 ContentResolver 查询
【发布时间】:2017-09-12 19:26:03
【问题描述】:

如果当前日期和交易日期之间的差异小于 15 分钟,我必须运行该服务。

我有创建表的 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 之间的差异。

请帮忙

【问题讨论】:

    标签: android android-sqlite android-contentresolver


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你可以试试这个

             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 数据库中的 epoch 中,那么您可以这样做

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

      【讨论】:

      • 也许我必须将日期转换为时间戳:String date = "1410293471300"; String[] selectionArgs = new String[]{ date };
      • 我已经在我的回答中告诉你了 new String[]{date}
      • 这很奇怪。如果我检查 ToDoDatabase.ToDoDatabaseEntry.start_dealDate_column 的值,返回的值类似于 1410293471300,不像时间戳格式。
      • 所以我必须这样: Date curDate = New Date();字符串日期 = String.valueof(curDate.getTime());光标 cursor = context.getContentResolver().query( ToDoDatabase.ToDoDatabaseEntry.CONTENT_URI, null, ToDoDatabase.ToDoDatabaseEntry.start_dealDate_column+"
      • 这有效吗@Renat Ahmetshin?查看更新的答案
      猜你喜欢
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      相关资源
      最近更新 更多