2012-03-15 2 views
2

Добрый день. У меня другая проблема, связанная с 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 на дату сегодня = новая дата (expDateString);

+1

возможный дубликат: http://stackoverflow.com/questions/2592501/compare-dates-in-java – assylias

+0

Вы должны хранить в 'date' в вашем 'TableModel', конвертируя его при первой возможности после [поиска] (http://stackoverflow.com/q/9716893/230513) и задолго до [рендеринга] (http://stackoverflow.com/q/9714110/230513) , – trashgod

ответ

0

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

Double date = Double.parseDouble(expDateString); //does not work! 
0

Простой пример того, как можно сравнить вас даты. Обратите внимание: если объекты в 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))); 

} 
0

линия Double date = Double.parseDouble(expDateString);

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

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

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

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

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

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

0
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; 
    } 

Пожалуйста CHK это оборотный штраф

Смежные вопросы