将字符串解析为日期,然后比较日期

Parse String to Date and then compare Dates

我正在开发一个自适应待办应用程序,在此用户中将有一个按钮来重新安排待处理任务(过去日期的任务),当用户单击重新安排时,它将待处理任务日期更改为当前空闲日期(未分配给任何任务的日期。我无法理解的是如何从数据库中检索日期并将其与可用的 dates.But 格式器进行比较显示错误,如果比较也显示错误。

public void UpdateData()  {
    Calendar cal = Calendar.getInstance();
    SQLiteDatabase db = mHelper.getReadableDatabase();
    Cursor cursor = db.query(TaskContract.TaskEntry.TABLE_NAME,
            new String[]{TaskContract.TaskEntry._ID,
                    TaskContract.TaskEntry.COLUMN_DATE,
            },
            null, null, null, null, null);
    //Calendar reminderCalendar = Calendar.getInstance();
    //reminderCalendar.set(year, month, day);
    SimpleDateFormat formatter  = new SimpleDateFormat("dd/MM/yyyy");
    String str1 = TaskContract.TaskEntry.COLUMN_DATE;
    Date date1 = formatter.parse(str1);//Show Error UnHandled Exception java.text.parse exception.
    if (date1.before(cal))// Shows error and says to flip to (cal.before(date1)) {

        ContentValues cv = new ContentValues();
        final Calendar c = Calendar.getInstance();
        int yy = c.get(Calendar.YEAR);
        int mm = c.get(Calendar.MONTH);
        int dd = c.get(Calendar.DAY_OF_MONTH);

    }

}

String str1 = TaskContract.TaskEntry.COLUMN_DATE;

假设您的专栏名为 MYDATE,您的代码表示 str1 = "MYDATE"; 你能告诉我 MYDATE 是什么日期吗?格式化程序也不能,因此例外。

我相信你想要的是:-

        String str1 = "";
        if (cursor.moveTofirst) {
            str1 = cursor.getString(cursor.getColumnIndex(TaskContract.TaskEntry.COLUMN_DATE));
        } else {
            // handle no data being extracted for some reason
        }
        cursor.close(); // assuming you've done with the Cursor
        Date date1 = formatter.parse(str1); 
        ..........

进一步解释当你说:-

`Cursor cursor = db.query(......`

你是说从 table(第一个参数)给我一个游标,带有列(第二个参数,所有列为空),第三个参数 where 子句等等。

如果它有效,您将获得一个名为 cursor 的 Cursor,其中包含您的数据作为多行列(如电子表格)。

要获取数据,您需要执行与从单元格 A1 中获取数据相同的操作(A 是第一行的第一列)。

但是您移动 到一行,然后使用 get???? 方法之一获取第 n 列。在 上方移动 first 行(根据您的代码的外观,我们只期望第一行(稍后会详细介绍))。

在一行中,您可以通过对列使用 index/offset 从列中 获取 数据。第一列为 0,下一个为 1,依此类推。

但是,如果您更改查询,则必须解决这个问题并且可能会更改它可能会带来困难,因此使用列名查找 index/offest 可能要容易得多。因此,getColumnIndex(column_name_as_a_string)

回到移动,解释为什么 moveToFirstif 中。

一个游标可以包含0行或多行,一个游标,如果查询成功不会为null,而是返回一个空游标(这是比较常见的情况,有时也是很有用的情况)。

因此,不是因为 Cursor 不能 移动 到某个位置而发出异常,而是 returns false(如果可以并且确实 移动).

所以 if(cursor.moveToFirst) {....} 是说只有在游标中有数据时才执行。

还有其他 move 方法,moveToLast()、moveToNext()、moveToPrevious() 和 moveToPosition(int)。

也许最常见的是moveToNext 例如

while(cursor.moveToNext()) {
    // use the respective column data here
}

遍历游标的所有行