0

その比較なしで以下のコードを実行すると機能しますが、その比較では失敗します。

Oleg Vaskevichのおかげで、彼のポイントでコードを更新しました。また、日付範囲は0-11月とは異なり1-31であり、Date(int、int、int)はDate(long)に置き換えられます

編集されたコード

Calendar cal = Calendar.getInstance();
    cal.add(Calendar.MONTH, -1);

    int month = cal.get(Calendar.MONTH);
    int year = cal.get(Calendar.YEAR);
    int day=cal.get(Calendar.DATE); // for dynamic reset rates


    callSince.setText("since(dd/mm/yyyy) :" + day + "/" + (month+1) + "/"  + year );
        // month+1 because month {0-11}

    Date resetDateDate = new Date(cal.getTimeInMillis());


    Calendar resetDateCal = Calendar.getInstance();
    resetDateCal.setTime(resetDateDate);
    String resetDate = String.valueOf(resetDateCal.getTimeInMillis());

    /*
     * CALL INCOMING
     */

    projection = new String[] {CallLog.Calls.DURATION };
    selection = CallLog.Calls.TYPE + "=? AND " + CallLog.Calls.DATE + " >=?" ;
    selectionArgs = new String[] { (String.valueOf(CallLog.Calls.INCOMING_TYPE)) , (resetDate) };

    try
    {
        Cursor cIn = getContentResolver().query(CallLog.Calls.CONTENT_URI, projection, selection, selectionArgs, sortOrder);
        startManagingCursor(cIn);
4

1 に答える 1

2

ここで、1月から1を引くと、12月ではなく-1になることがわかります。これを解決するには、java.util.Calendarクラスのメソッドを使用add()して、適切なフィールドのロールオーバーを処理します。例えば:

myCalendar.add(Calendar.MONTH, -1);

カレンダーの操作が完了して初めて、カレンダーの実際のフィールドを取得できます。

于 2013-02-03T21:50:26.660 に答える