2012-05-13 96 views
-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") 
+0

已编辑。知道我忘记了一些东西。我将它传递给循环中的相同值100次。 –

+0

这功课是这样吗?如果没有,为什么不使用'Date'和'SimpleDateFormat'? 'Date'具有'before()'和'after()'方法。 'SimpleDateFormat'允许'String'和'Date'之间的轻松覆盖。 – BalusC

+0

不是功课。我想我没有使用日期,因为大多数这些方法不赞成使用日历。 –

回答

1

你忽略了计算中的时间。在那个毫秒Calendar today = ...Calendar start = ...之间蜱过几次,你最终todaystart,并且end具有日期值相同,但两者startend的时间已经超过today。具体来说,由于您使用Calendar.getInstance()(它返回当前时间)来构建它们的全部三个,所以它们提前1 ms。因此,当发生该滴答时,today不在startend之间。如果你不关心它,你应该把时间归零。

0

发布的详细信息,以帮助您更好地像它输入它给错误的结果。

你的程序工作正常。

我认为一个日期不能大于和小于其他日期。

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

此外,您可以调试自己,打印日期,只要你没有得到预期的结果。

相关问题