私のアプリは、datepicker フラグメントを介してユーザーから日付フォームを受け取り、それを日、月、年を String 型の個々の列としてデータベースに格納します。
今、システムの現在の日付でこれらの日付のそれぞれを後でチェックする関数を作成しています。現在の日付がユーザーによって入力された (データベースに格納された) 日付よりも進んでいる場合、フラグ変数がインクリメントされます。
コードは次のとおりです。
public int checkDate() { //Method to check date and take action
//NOT COMPLETE. STILL FIGURING IT OUT.
String isstatus = "Ongoing";
String[] columns = new String[] {KEY_ROWID, DAY, MONTH, YEAR ,PROJECT_STATUS};
Cursor c = projectDatabase.query(DATABASE_TABLE, columns, PROJECT_STATUS + "=" + isstatus, null, null, null, null);
int result = 0;
int flag = 0;
int iRow = c.getColumnIndex(KEY_ROWID);
int iDay = c.getColumnIndex(DAY);
int iMonth = c.getColumnIndex(MONTH);
int iYear = c.getColumnIndex(YEAR);
final Calendar cal = Calendar.getInstance(); //fetch current system date
int cyear = cal.get(Calendar.YEAR);
int cmonth = cal.get(Calendar.MONTH);
int cday = cal.get(Calendar.DAY_OF_MONTH);
for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
String id = c.getString(iRow);
int fday = Integer.parseInt(c.getString(iDay));
int fmonth = Integer.parseInt(c.getString(iMonth));
int fyear = Integer.parseInt(c.getString(iYear));
if(cday>fday && cmonth>fmonth && cyear>fyear) {
flag++;
updateStatus(id, "Missed");
}
else
if(cday>fday && cmonth==fmonth && cyear==fyear) {
flag++;
updateStatus(id, "Missed");
}
else
if(cday==fday && cmonth>fmonth && cyear>fyear) {
flag++;
updateStatus(id, "Missed");
}
else
if(cday==fday && cmonth==fmonth && cyear>fyear) {
flag++;
updateStatus(id, "Missed");
}
else
if(cmonth>fmonth && cyear>fyear) {
flag++;
updateStatus(id, "Missed");
}
else
if(cmonth>fmonth && cyear==fyear) {
flag++;
updateStatus(id, "Missed");
}
result = flag;
}
return result;
}
ご覧のとおり、日付が先になる可能性のあるすべてのケースを比較する必要があります。個人的には、それは最も効率的な方法ではないと思います。何かアドバイス?