2012-05-13 100 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)

此外,您可以調試自己,打印日期,只要你沒有得到預期的結果。

相關問題