用Java比较日期
我对比较两个日期有问题。我试图将它与Date用Java比较日期,java,date,Java,Date,我对比较两个日期有问题。我试图将它与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
.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);
以及两种获取日期的方法:
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");
}
}
}
我不知道怎么了。在代码的其他部分中,此比较在相同的基础上正常工作 您之所以将
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
是2017年1月22日
以毫秒为单位,下面的代码显示:
public static void main(String[] args) throws Exception {
Date date = new Date(1485039600000L);
System.out.println(date);
}
现在,如果希望它显示当前日期,则需要使用date
类的no-argument构造函数
,即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));
你可以添加
System.out.println(“日期1”+date1)代码>和System.out.println(“日期2”+date2)将>编码到你的比较方法中,看看你得到了什么日期?开始日期2016-01-26和结束日期2016-01-29<编码>日期1的输出在后面!改变它!日期1周四2017年1月26日00:00:00 CET日期2周日2017年1月22日00:00:00 CET我不知道,为什么第二个日期是1月22日?!你能发布调用这个方法的代码吗?似乎传递了不正确的日期。在帖子中添加了更多代码。这就是全部。我知道传递的日期不正确(enddate),但这就是此方法中的全部代码。View
是类的对象吗?或者startDate
和endDate
是静态成员?需要检查哪些方法设置了这两个值,可能以前的值没有被删除,它仍然返回以前的值?再次感谢您的帮助