-2

同じオブジェクトの同じメソッドで同じ引数が渡されました。通常はtrueと表示されますが、これは私が期待するものです。しかし...時々falseが表示されます。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 = ...todaystart、およびendの日付は同じ値になりますが、 と の両方の時刻startendより進んでtodayいます。Calendar.getInstance()具体的には、現在の時刻を返す を使用して 3 つすべてを構築しているため、それらは 1 ミリ秒進んでいます。したがって、そのティックが発生したときは、todayと の間ではありませstartend。気にしない場合は、時間をゼロにする必要があります。

于 2012-05-13T05:25:04.913 に答える
0

どの入力に対して間違った結果が得られているかをよりよく理解できるように、より多くの情報を投稿してください。

あなたのプログラムは正常に動作しています。

One Date は、他の日付よりも大きくも小さくもできないと思います。

両方の引数で同じ日付を渡しています。(2012-05-01 00:00:00).

さらに、期待した結果が得られないときはいつでも、自分でデバッグしたり、日付を出力したりできます。

于 2012-05-13T03:46:00.067 に答える