如何比较java中的两个日期?

Zak*_*rah 0 java swing compare date jtable

向每一位努力工作的开发人员致敬,

并欢呼那里的每一个挣扎者.

其实我在这里是因为我遇到了一个非常基本的问题.

我正在构建一个客户端 - 服务器应用程序,我很困惑如何比较从jtable中提取的两个日期(最终我从来没有遇到任何日期操作).

我用过这段代码:

public static final String DATE_FORMAT_NOW = "yyyy-MM-dd";

  public static String now() {
   Calendar cal = Calendar.getInstance();
   SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
   return sdf.format(cal.getTime());

   }

 public static void ColorTheCell2(JTable jTable2){
          jTable2.getColumn("Date d'expiration").setCellRenderer(
    new DefaultTableCellRenderer() {

        @Override
    public Component getTableCellRendererComponent
    (JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column){

    Calendar datetable=Calendar.getInstance();

    String date=value.toString();
    String day=""+date.substring(8).toString();
    String month=""+date.substring(5, 7).toString();
    String year=""+date.substring(0,4).toString();

   datetable.set(Integer.parseInt(year),Integer.parseInt(month),Integer.parseInt(day));
    Calendar curdate=Calendar.getInstance();

     String date1=now();
     String day1=""+date1.substring(8).toString();
     String month1=""+date1.substring(5, 7).toString();
     String year1=""+date1.substring(0,4).toString();
                curdate.set(Integer.parseInt(year1),Integer.parseInt(month1)+1,Integer.parseInt(day1));


            if(datetable.before(curdate)){

                setText(value.toString());
                setBackground(Color.red);
            }
            else{
                 setText(value.toString());
            }

return this;
 }
  });
    }
Run Code Online (Sandbox Code Playgroud)

感谢您的时间.最好的祝福

JB *_*zet 6

您不会告诉单元格中值的类型.如果它是一个字符串,那么你做错了:它应该是一个日期,并且渲染器应该使用a DateFormat来渲染日期(除了设置适当的背景.例如,这将允许按时间顺序对表进行排序按字典顺序排列.

如果它已经是Date,那么只需使用compareTo方法将其与当前日期进行比较.

你的now()方法真的很奇怪,因为它似乎返回一个String而不是一个Date.表示日期的适当类型是Date,而不是String.使用Date并在每次需要时使用DateFormat将其格式化为String.不要反过来(使用String并解析它 - 手动 - 每次需要日期时).