как определить дата этой недели или прошлой?

У меня есть массив дат. Например 10 дат. Мне нужно рассчитать каждую дату - это на этой неделе или на прошлой неделе. Как сделать это?

private List<Receipt> getSectionPosition(List<Receipt> receiptList){
       List<Receipt> list = new ArrayList<>();
       Date now = new Date();
        for (int i = 0; i<receiptList.size(); i++){
            if (receiptList.get(i).getCreatedDate().compareTo(now)==0){
                list.add(receiptList.get(i));
            }
        }
       return list;
    }

я передаю List<Receipt>, и если квитанция имеет дату на этой неделе, я добавляю ее в новый список. но это не работа.


person ip696    schedule 16.06.2015    source источник
comment
вам нужно проверить формат даты Date now и getCreatedDate. Он должен быть одинаковым для сравнения.   -  person Daud Arfin    schedule 16.06.2015


Ответы (2)


Используйте что-то вроде этого для сравнения:

private List<Receipt> getSectionPosition(List<Receipt> receiptList){
   List<Receipt> list = new ArrayList<>();
   Date now = new Date();
   Calendar c = Calendar.getInstance();
   c.setTime(now);
   int currentWeek = c.get(Calendar.WEEK_OF_YEAR);
   for (int i = 0; i<receiptList.size(); i++){
       c.setTime(receiptList.get(i).getCreatedDate());
       int createdDateWeek = c.get(Calendar.WEEK_OF_YEAR);

       if (currentWeek == createdDateWeek){
           list.add(receiptList.get(i));
       }
   }
   return list;
}

P.S. для более правильных результатов вы также можете проверить год (а не только неделю года), что вы можете сделать следующим образом: int year = c.get(Calendar.YEAR); http://developer.android.com/reference/java/util/Calendar.html#WEEK_OF_YEAR

person Gabriella Angelova    schedule 16.06.2015
comment
это работает! еще маленький вопрос. Мне нужно изменить, чтобы добавить только на прошлой и на этой неделе? - person ip696; 16.06.2015
comment
Извините, я не понимаю вашего вопроса.. не могли бы вы задать его еще раз? Вам нужно проверить, находится ли дата на предыдущей неделе или? - person Gabriella Angelova; 16.06.2015
comment
Аааа, вы хотите проверить, находится ли дата на текущей неделе или на прошлой неделе? Если да, вы можете изменить это утверждение подтверждения if (currentWeek == createdDateWeek){ на это if (currentWeek == createdDateWeek || createdDateWeek == currentWeek - 1){, потому что текущая неделя на самом деле является номером недели в году, и когда вы получаете currentWeek - 1, вы становитесь предыдущей неделей. - person Gabriella Angelova; 16.06.2015
comment
А граничные условия? например если текущая неделя является первой неделей года? - person Dev; 29.07.2015

Создайте метод сравнения дат

public boolean isTheSameWeek (Date date ){

Calendar c=Calendar.getInstance();
year1=c.get(c.YEAR);
week1=c.get(c.WEEK_OF_YEAR);

Calendar c1=Calendar.getInstance();
c.setTimeInMillis(date.getTime())
year2=c.get(c.YEAR);
week2=c.get(c.WEEK_OF_YEAR);

if(year1 == year2){
       if(week1 == week2}{
       return true;

       }
    }
return false
}}

В вашем методе вызовите это

     if (isTheSameWeek(receiptList.get(i).getCreatedDate())){
person Raluca Lucaci    schedule 16.06.2015
comment
Неправильно использовать c.get(c.YEAR), это должно быть c.get(Calendar.YEAR) stackoverflow.com/questions/10161637/ - person Gabriella Angelova; 16.06.2015