сравнение значений даты по григорианскому календарю - PullRequest
0 голосов
/ 06 июня 2011

Я пытаюсь настроить часть программы, которая позволяет человеку просматривать транзакции по счету на основе даты транзакции. Пользователь вводит день месяца и год для просмотра транзакций, и это сравнивается с датой, связанной с данной транзакцией. У меня проблемы с написанием строк кода, которые определяют, равна ли дата

if(aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.MONTH).compareTo(month)==0){
                        if(aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.DAY_OF_MONTH).compareTo(day)==0){
                            if(aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.YEAR).compareTo(year)==0){

Я получаю сообщение об ошибке: «не удается вызвать compareTo (int) для примитивного типа int» см. полный код ниже:

System.out.println("Enter the account number of the account that you want to view transactions for");
            number=keyboard.nextLong();
            System.out.println("Enter the month day and year of the date that the transactions were completed");
            int month=keyboard.nextInt()-1;
            int day=keyboard.nextInt();
            int year=keyboard.nextInt();
            found=false;
            try{
            for(int i=0;i<aBank.getAccounts().size();i++){
                if (aBank.getAccounts().get(i).getAccountNumber().compareTo(number)==0){
                    found=true;
                    System.out.println("Below is a list of transactions completed on "+month+ "/" +day+ "/" +year);
                    for (int j=0;j<aBank.getAccounts().get(i).getTransaction().size();j++){
                    if(aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.MONTH).compareTo(month)==0){
                        if(aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.DAY_OF_MONTH).compareTo(day)==0){
                            if(aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.YEAR).compareTo(year)==0){
                                aBank.getAccounts().get(i).getTransaction().get(j).toString();
                                break;
                            }
                        }

                    }

                }

Ответы [ 4 ]

1 голос
/ 06 июня 2011

Просто используйте:

aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.MONTH) == month

1 голос
/ 06 июня 2011

Если все XYZ.getTransDate() возвращает календарь, то
XYZ.getTransDate().get(SOMETHING) возвращает примитив int. Примитивы не имеют метода comapreTo, просто используйте ==

поэтому вместо XYZ.getTransDate().get(MONTH).compareTo(month) == 0 используйте XYZ.getTransDate().get(MONTH) == month

1 голос
/ 06 июня 2011

Для примитивных значений вы можете просто использовать ==

aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.YEAR)==year
0 голосов
/ 06 июня 2011

Это должно работать:

Calendar transDate = aBank.getAccounts().get(i).getTransaction().get(j).getTransDate();
if (transDate.get(Calendar.YEAR) == year &&
    transDate.get(Calendar.MONTH) == month &&
    transDate.get(Calendar.DAY_OF_MONTH) == day) {

    // do something
}

Еще лучше, если вы используете что-то вроде Apache Commons Lang :

if (DateUtils.isSameDay(aBank.getAccounts().get(i).getTransaction().get(j).getTransDate(),
                        Calendar.getInstance().set(year, month, day)) {
    ...
}
...