我对两个日期的比较有问题。我尝试将其与日期.after()
方法进行比较,将其放入Calendar对象然后进行比较,但它仍然无法正常工作。
防爆。当我将startDate
作为2017-01-26和endDate
作为2017-01-28时,它会显示startDate
之后!但是当我将startDate
作为2017-01-23之前的日期(例如2017-01-01)和endDate
作为2017-01-28时,那么一切都还可以......
我有两个像这样的微调器的视图:
SimpleDateFormat model = new SimpleDateFormat("dd-MM-yyyy");
spinnerStartDate = new JSpinner(new SpinnerDateModel());
spinnerStartDate.setEditor(new JSpinner.DateEditor(spinnerStartDate, model.toPattern()));
spinnerStartDate.setModel(new SpinnerDateModel(new Date(1485039600000L), null, null, Calendar.DAY_OF_YEAR));
panel.add(spinnerStartDate);
SimpleDateFormat model2 = new SimpleDateFormat("dd-MM-yyyy");
spinnerEndDate = new JSpinner(new SpinnerDateModel());
spinnerEndDate.setEditor(new JSpinner.DateEditor(spinnerEndDate, model2.toPattern()));
spinnerEndDate.setModel(new SpinnerDateModel(new Date(1485039600000L), null, null, Calendar.DAY_OF_YEAR));
panel.add(spinnerEndDate);
获得Date的两种方法:
public Date getStartDate(){
return (Date)spinnerStartDate.getValue();
}
public Date getEndDate(){
return (Date)spinnerEndDate.getValue();
}
和听众
public void addFilterListener(ActionListener act){
btnFilter.addActionListener(act);
}
然后我有控制器,我必须检查,如果第二个日期不是第一个。
class FilterListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
Date date1 = View.getStartDate();
Date date2 = View.getEndDate();
if(date1.after(date2)){
System.out.println("date1 is after! change it!");
System.out.println("Date 1 " + date1);
System.out.println("Date 2 " + date2);
}
else {
System.out.println("No");
}
}
}
我不知道出了什么问题。在代码的其他部分,这种比较在相同的基础上正常工作!
答案 0 :(得分:0)
您获得2017-01-22
日期的原因是因为这两行:
spinnerStartDate.setModel(new SpinnerDateModel(new Date(1485039600000L), null, null, Calendar.DAY_OF_YEAR));
spinnerEndDate.setModel(new SpinnerDateModel(new Date(1485039600000L), null, null, Calendar.DAY_OF_YEAR));
这是因为1485039600000L
是22-Jan-2017
,以毫秒为单位,下面的代码显示了这一点:
public static void main(String[] args) throws Exception {
Date date = new Date(1485039600000L);
System.out.println(date);
}
现在,如果您希望它显示当前日期,那么您需要使用no argument constructor
类的Date
,即您的setModel
语句将更改为以下内容:
spinnerStartDate.setModel(new SpinnerDateModel(new Date(), null, null, Calendar.DAY_OF_YEAR));
spinnerEndDate.setModel(new SpinnerDateModel(new Date(), null, null, Calendar.DAY_OF_YEAR));