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

时间:2011-10-12 22:19:05

标签: java swing date jtable compare

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

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

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

我正在构建一个客户端 - 服务器应用程序,我对如何比较从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;
 }
  });
    }

谢谢你的时间。 最好的问候

4 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:4)

查看compareTo() in Calendar class

一般来说,我更喜欢在Java中使用Joda Time API来处理相关日期和时间。

答案 2 :(得分:4)

如果Object value中的值属于Date类型,则将其转换为Date -

Date valDate = (Date) value;

或者,如果它是String,那么从中解析Date -

Date valDate = new SimpleDateFormat("pattern in value").parse((String) value);

获取当前日期 -

Date currDate = new Date();

然后您可以在Date class -

中使用以下任何一种方法
  1. boolean after(Date when)
  2. boolean before(Date when)
  3. int compareTo(Date anotherDate)
  4. e.g。

    if(valDate.before(currDate)) {
    
        //...
    

    API doc:DateSimpleDateFormat

答案 3 :(得分:3)

Date实现了Comparable接口,因此您可以使用方法compareTo()来比较两个日期。 Calendar也是如此,只需使用其compareTo()方法

即可