android.provider.CallLog.Date的比较失败

时间:2013-02-03 21:44:24

标签: android

当我在没有这种比较的情况下执行下面的代码时,它可以工作,但是通过这种比

感谢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);

1 个答案:

答案 0 :(得分:2)

你可以看到从1月份减去1会导致-1,而不是12月。要解决此问题,请使用java.util.Calendar类的方法add()来处理正确字段的滚动。例如:

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

只有在您完成日历工作后才能检索日历的实际字段。