Как сравнить текущую дату и заданную дату в Jtable?

Добрый день. У меня есть еще одна проблема, связанная с Jtable. Я хочу изменить цвет строки таблицы, если дата внутри столбца (срок действия) превышает или равна текущей дате.

Я пробовал этот код, но получаю сообщение об ошибке: java.lang.NumberFormatException: для входной строки: "2012-03-15"

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");     
Calendar cal  = Calendar.getInstance();           
String expDateString = sdf.format(cal.getTime());
System.out.println(expDateString);
Double date = Double.parseDouble(expDateString);
Double val = Double.parseDouble(tableSummary.getModel().getValueAt(row, 6).toString());

for(int i=0; i<=tableSummary.getRowCount()-1; i++){
   if(val >= date){
        renderer.setBackground(red);
   }
}

Спасибо!

вот новый код:

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");     
 Calendar cal  = Calendar.getInstance();           
 String expDateString = sdf.format(cal.getTime());

 Date today = new Date(expDateString);
               System.out.println("ang churva is " + today);
 Date given = new Date(tableSummary.getModel().getValueAt(row, 6).toString());

 for(int i=0; i<=tableSummary.getRowCount()-1; i++){
      if(today.compareTo(given)>=0){
            renderer.setBackground(red);
       }
 }

но я получаю это исключение: java.lang.IllegalArgumentException at Date today = new Date(expDateString);


person zairahCS    schedule 15.03.2012    source источник
comment
возможный дубликат: stackoverflow.com/questions/2592501/compare-dates-in-java   -  person assylias    schedule 15.03.2012
comment
Вы должны хранить Date в своем TableModel, преобразовывая его при первой же возможности после извлечения и задолго до рендеринг.   -  person trashgod    schedule 15.03.2012


Ответы (5)


Используйте код

DATEDIFF('d',NOW(),exdate)

в вашем запросе набора результатов. Он вернет разницу. Измените его, чтобы он соответствовал вашим потребностям.

person Gomathi    schedule 17.07.2012

Вы не можете указать строку даты в двойном

Double date = Double.parseDouble(expDateString); //does not work!
person juergen d    schedule 15.03.2012

Простой пример того, как вы можете сравнить даты. Обратите внимание, что если объекты в вашем JTable уже являются датами, вам не нужен весь синтаксический анализ, который облегчит вашу жизнь.

Вывод кода ниже:

expiryDate=2012-03-15
tableDateOK=2012-03-12
tableDateExpired=2012-03-18
tableDateOK>expiryDate = false
tableDateExpired>expiryDate = true

Код:

public static void main(String args[]) throws ParseException {
    String expiryDate  = "2012-03-15";
    String tableDateOk = "2012-03-12";
    String tableDateExpired = "2012-03-18";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    System.out.println("expiryDate="+expiryDate);
    System.out.println("tableDateOK="+tableDateOk);
    System.out.println("tableDateExpired="+tableDateExpired);
    System.out.println("tableDateOK>expiryDate = " + sdf.parse(tableDateOk).after(sdf.parse(expiryDate)));
    System.out.println("tableDateExpired>expiryDate = " + sdf.parse(tableDateExpired).after(sdf.parse(expiryDate)));

}
person assylias    schedule 15.03.2012

линия 1_

это не может работать, потому что строка «2012-03-15» просто не является допустимым двойным значением.

Я не понимаю, почему вы пытаетесь сравнить два двойных значения:

  1. если у вас есть дата в таблице, используйте Date.after() и Date.before(), чтобы узнать, является ли ваша дата раньше или позже.
  2. если у вас есть строка в таблице, используйте SimpleDateFormat.parse(), чтобы получить от нее дату и выполнить пункт 1
person Jan Hruby    schedule 15.03.2012

public  String compareDate( Request request ) throws ParseException { 
        Date debitDate= request.getPaymentTxn().getCrValDt();
        Date now = new Date();
        String response="";
        SimpleDateFormat sdfDate = new SimpleDateFormat("dd/MM/yyyy");
        String strCurrDate = sdfDate.format(now);
        String strDebitDate = sdfDate.format(debitDate);
        System.out.println("Current Date: " + strCurrDate);
        Date currentDate =  new SimpleDateFormat("dd/MM/yyyy").parse(strCurrDate);
        Date txnDate =  new SimpleDateFormat("dd/MM/yyyy").parse(strDebitDate);
        System.out.println("C -> "+currentDate);
        System.out.println("C -> "+txnDate); 
         if (txnDate!=null){
         if (currentDate.equals(txnDate))
         {
             System.out.println("Valid Txn");
             response="valid";
         }
         if (currentDate.after(txnDate))
         {
            System.out.println("--> Not  Valid TXN Past");   
            response="notValid";
         }
        if (currentDate.before(txnDate)){
            System.out.println("Future Valid TXn");
             response="future";
        }
     }
        return response;
    }

ПОЖАЛУЙСТА, проверьте, все ли работает нормально

person Vignesh Anand    schedule 23.02.2013