将字符串解析为日期,然后比较日期
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)
回到移动,解释为什么 moveToFirst
在 if
中。
一个游标可以包含0行或多行,一个游标,如果查询成功不会为null,而是返回一个空游标(这是比较常见的情况,有时也是很有用的情况)。
因此,不是因为 Cursor 不能 移动 到某个位置而发出异常,而是 returns false(如果可以并且确实 移动).
所以 if(cursor.moveToFirst) {....}
是说只有在游标中有数据时才执行。
还有其他 move
方法,moveToLast()、moveToNext()、moveToPrevious() 和 moveToPosition(int)。
也许最常见的是moveToNext
例如
while(cursor.moveToNext()) {
// use the respective column data here
}
遍历游标的所有行
我正在开发一个自适应待办应用程序,在此用户中将有一个按钮来重新安排待处理任务(过去日期的任务),当用户单击重新安排时,它将待处理任务日期更改为当前空闲日期(未分配给任何任务的日期。我无法理解的是如何从数据库中检索日期并将其与可用的 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)
回到移动,解释为什么 moveToFirst
在 if
中。
一个游标可以包含0行或多行,一个游标,如果查询成功不会为null,而是返回一个空游标(这是比较常见的情况,有时也是很有用的情况)。
因此,不是因为 Cursor 不能 移动 到某个位置而发出异常,而是 returns false(如果可以并且确实 移动).
所以 if(cursor.moveToFirst) {....}
是说只有在游标中有数据时才执行。
还有其他 move
方法,moveToLast()、moveToNext()、moveToPrevious() 和 moveToPosition(int)。
也许最常见的是moveToNext
例如
while(cursor.moveToNext()) {
// use the respective column data here
}
遍历游标的所有行