0

我正在尝试将当前日期与存储在数组中的日期进行比较,但我无法使用if条件比较日期。

我使用此代码来比较日期:

DateFormat TO = new SimpleDateFormat("yyyy-MM-dd ");
Today = TO.format(Calendar.getInstance().getTime());
for (int i = 0; i < jsonArray.length(); i++) {

    // Today has a value 2018-03-13
    // ScheduleDates[i] has a value 2018-03-13
    // ScheduleDates[10] has a value 2018-03-13
    if (Today.equals(ScheduleDates[i])) {
        Toast.makeText(Main2Activity.this, "Match Found" + ScheduleDates[i] + "--"
                       + StartTimes[i] + "--" + Endtimes[i], Toast.LENGTH_LONG).show();
        break;
    } else {
        Toast.makeText(Main2Activity.this, "Match Not Found", Toast.LENGTH_LONG).show();
        break;
    }
}

但是当我运行循环时,它只显示"match not found". 我找不到我犯了什么错误,有人可以帮忙找出错误吗?

4

2 回答 2

0

仅删除以日期格式定义的额外空间,如下所示...

        DateFormat TO = new SimpleDateFormat("yyyy-MM-dd");
于 2018-03-13T12:52:57.480 回答
0

用于 Log.d("Today",String.valueOf(Today)); 查看Today变量中的内容。也使用

for(int i=0;i<jsonArray.length();i++){

   Log.d("Array",String.valueOf(ScheduleDates[i]));

}

尝试使用 logcat 亲眼验证存储在变量中的确切Today日期是否也存在于数组中。如果没有,那就是你的问题。您的 if 语句工作得很好,数组中没有任何日期与Today.

编辑:它在您的代码中不可见,但我愿意接受它jsonArrayScheduleDates具有相同的长度,并且第二个源自第一个。否则你的for循环会崩溃。

Edit2: 您的问题实际上是您的 break statements。您的for循环只运行一次,因此如果数组的第一项与其中的日期匹配,Today它将停止并打印您的成功消息。如果数组的第一项与其中的日期不匹配,Today则会再次停止并打印失败消息,正如您所说的那样。

因此,删除 break 语句,然后for循环将运行尽可能多的次数,并打印相应的消息,无论是成功还是失败。

如果您只想找到第一个匹配项然后停止,请删除您的 break 语句else但保留if.

于 2018-03-13T11:26:10.553 回答