-2

相同的参数传递给同一个对象的同一个方法。它通常会显示为真,这是我所期望的。但是......有时它显示为假。大约 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")
4

2 回答 2

1

您在计算中忽略了时间。在少数情况下毫秒在Calendar today = ...和之间跳动Calendar start = ...,您最终会得到today,startend具有相同的日期值,但两者的时间都在startend之前today。具体来说,它们比您使用Calendar.getInstance()返回当前时间的 1 ms 提前了 1 毫秒,以构建所有三个。因此,当该滴答声发生时,today不在startand之间end。如果你不关心它,你应该把时间归零。

于 2012-05-13T05:25:04.913 回答
0

发布更多信息以帮助您更好地了解哪些输入给出了错误的结果。

你的程序运行良好。

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

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

此外,您可以自己调试,在没有得到预期结果时打印日期。

于 2012-05-13T03:46:00.067 回答