传递相同参数时执行不同的方法

时间:2012-05-13 03:23:47

标签: java

为同一对象传递相同方法的相同参数。它通常会显示为true,这正是我所期望的。但是......有时它会显示错误。 100次中约2-3次。导致此行为的此方法有什么问题?

年,月和日分别是包含“2012”,“4”,“1”的实例变量。

public boolean isInDateRange(String startDate, String endDate)
{
    if(startDate == null || endDate == null){
        return false;
    }
    Calendar today = Calendar.getInstance();
    today.set(Integer.valueOf(year), Integer.valueOf(month), Integer.valueOf(day));

    Calendar start = Calendar.getInstance();
    //subtract 1 from the month parameter because java.util.Calendar's months
    //go from 0 to 11 instead of 1 to 12.
    start.set(Integer.valueOf(startDate.substring(0, 4)), Integer.valueOf(startDate.substring(5, 7)) - 1, Integer.valueOf(startDate.substring(8, 10)));

    Calendar end = Calendar.getInstance();
    end.set(Integer.valueOf(endDate.substring(0, 4)), (Integer.valueOf(endDate.substring(5, 7))) -1 , Integer.valueOf(endDate.substring(8, 10)));

    return today.compareTo(start) >= 0 && today.compareTo(end) <= 0;
}

这就是我传递给它的东西

calendarDetails.getTuesday().isInDateRange("2012-05-01 00:00:00", "2012-05-01 00:00:00")

2 个答案:

答案 0 :(得分:1)

你忽略了计算的时间。在Calendar today = ...Calendar start = ...之间的毫秒时间内,您最终得到的todaystartend具有相同的值日期,但startend的时间早于today。具体来说,它们提前1毫秒,因为你使用Calendar.getInstance()来返回当前时间,以构建所有这三个。因此,当发生此刻度时,today不在startend之间。如果你不关心它,你应该把时间归零。

答案 1 :(得分:0)

发布更多信息,以帮助您更好地了解哪些输入会产生错误结果。

你的程序运行正常。

我认为One Date不能大于和小于其他日期。

您在两个参数中传递相同的日期。 (2012-05-01 00:00:00)

此外,您可以自行调试,只要您没有获得预期的结果就打印日期。