比较Java中的日期

时间:2017-01-28 23:04:26

标签: java date

我对两个日期的比较有问题。我尝试将其与日期.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");
                }
     }
 }

我不知道出了什么问题。在代码的其他部分,这种比较在相同的基础上正常工作!

1 个答案:

答案 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));

这是因为1485039600000L22-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));