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

时间:2017-10-21 06:26:24

标签: android database sqlite date date-comparison

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

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

    }

}

1 个答案:

答案 0 :(得分:0)

String str1 = TaskContract.TaskEntry.COLUMN_DATE;

假设您的专栏名为 MYDATE ,您的代码就是说str1 =" MYDATE&#34 ;; 你能告诉我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(......`

你是说从表中获取一个游标(第一个参数),列(第二个参数,所有列为null),第三个参数where子句等等。

如果它有效,你将获得一个名为cursor的Cursor,它将你的数据包含在多行列中(如spreadhsheet)。

要获取你需要做的数据,相当于从单元格A1获取数据(A是第一行的第一列)。

但是移动到一行,然后使用get????方法获取第n列。在移动上方第一个行(我们只希望代码外观的1行(稍后))。

通过使用该列的索引/偏移量,您可以获取列中的数据。第一列为0,下一个为1等。

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

回到移动,解释为什么moveToFirst位于if

游标可以包含0行或更多行,游标,如果查询工作不会为null,则返回空游标(这是相对频繁发生的,有时也是非常有用的情况)。

因此,不是因为Cursor不能移动到某个位置而发出异常,而是返回false(如果它可以并且移动则为true)。 / p>

所以if(cursor.moveToFirst) {....}只说光标中有数据。

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

最常见的可能是 moveToNext ,例如

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

遍历游标的所有行