0

検索パラメーター用に2つの日付ピッカーがありますが、1週間以上検索することはできません(サーバーに大きな負荷がかかるため)。最初の日付が2番目の日付より前であるかどうか、および最初の日付と2番目の日付が間隔が 7 日未満です。すべてが正しい場合、false でない場合は true ブール値を返します。

public Calendar max = Calendar.getInstance();

public boolean checkweek(Calendar cStart, Calendar cEnd) {
    Toast.makeText(this,
            cStart.DAY_OF_MONTH + " - " + cStart.MONTH + " - " + cStart.YEAR, Toast.LENGTH_LONG).show();
    if (cEnd.after(cStart) || ((cEnd.DAY_OF_MONTH == cStart.DAY_OF_MONTH) && (cEnd.MONTH == cStart.MONTH))) {
        max.set(Calendar.YEAR, cStart.YEAR);
        max.set(Calendar.MONTH, cStart.MONTH);
        max.set(Calendar.DAY_OF_MONTH, cStart.DAY_OF_MONTH);
        max.add(Calendar.DAY_OF_MONTH, 7);
        Toast.makeText(this,
                max.DAY_OF_MONTH + " - " + max.MONTH + " - " + max.YEAR,
                Toast.LENGTH_LONG).show();
        if (cEnd.before(max)) {
            return true;
        }
        else{
            return false;
        }
    }
    else{
    return false;}
}

しかし、null 例外がスローされます。私はcStartとcEndを宣言しているので、それが何であるかわかりません...

4

2 に答える 2

2

これに数学を使用しないのはなぜですか?

cEnd.getTimeInMillis() - cStart.getTimeInMillis() > (7L * 24L * 60L * 60L * 1000L)

または、 @Samのおかげで、次を使用してこれを簡単にすることができますDateUtils.WEEK_IN_MILLIS

cEnd.getTimeInMillis() - cStart.getTimeInMillis() > DateUtils.WEEK_IN_MILLIS

仕組み: Calendar.getTime().getTime()ミリ秒値の a を返しlongます。604800000Lそれらを差し引いて(差を得るために)、それが(上記の式に従って、1週間のミリ秒)より大きいかどうかを確認します。

これは no NullPointerExceptionif run when cStartand cEndare non-null を提供する必要があります。

于 2012-10-18T22:36:16.913 に答える
0

エリックの答えは機能し、おそらくあなたの問題に対する最良の解決策です。

独自のコードを修正するには; ただし、残りの部分についてはcEnd.get( Calendar.DAY_OF_MONTH )代わりに使用する必要があります。cEnd.DAY_OF_MONTH

于 2012-10-18T22:38:57.687 に答える