向每一位努力工作的开发人员致敬,
并为那里的每一个挣扎者欢呼。
其实我在这里是因为我遇到了一个非常基本的问题。
我正在构建一个客户端 - 服务器应用程序,我对如何比较从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;
}
});
}
谢谢你的时间。 最好的问候
答案 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 -
boolean after(Date when)
boolean before(Date when)
int compareTo(Date anotherDate)
e.g。
if(valDate.before(currDate)) {
//...
API doc:Date,SimpleDateFormat
答案 3 :(得分:3)
Date
实现了Comparable
接口,因此您可以使用方法compareTo()来比较两个日期。 Calendar
也是如此,只需使用其compareTo()方法