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)
感谢您的时间.最好的祝福
您不会告诉单元格中值的类型.如果它是一个字符串,那么你做错了:它应该是一个日期,并且渲染器应该使用a DateFormat来渲染日期(除了设置适当的背景.例如,这将允许按时间顺序对表进行排序按字典顺序排列.
如果它已经是Date,那么只需使用compareTo方法将其与当前日期进行比较.
你的now()方法真的很奇怪,因为它似乎返回一个String而不是一个Date.表示日期的适当类型是Date,而不是String.使用Date并在每次需要时使用DateFormat将其格式化为String.不要反过来(使用String并解析它 - 手动 - 每次需要日期时).