避免在日历代号一中选取未来的日期



我有一个日历,所以我可以通过以下方式获取日期:

Calendar cld = new Calendar();
cld.getCurrentDate();

也:

cld.getDate();

所以我有当前日期和我在日历中选择的日期。我想做的是这样的:

Date currentdate = cld.getCurrentDate();
Date chosendate = cld.getDate();
long math = Math.abs(currentdate.getTime() - chosendate.getTime());
long result = math / (24 * 60 * 60 * 1000);
 if(result < 0)Dialog.show("Invalid Date", "Please select a valid date.", "OK", null);

不确定我的方法是否正确,实际上我想要一种方法来避免从日历中获取未来的日期,如何在代号一中做到这一点?

编辑:

Calendar cld = new Calendar() {
   protected void updateButtonDayDate(Component dayButton, int year, int currentMonth, int day) {
       super.updateButtonDayDate(dayButton, year, currentMonth, currentDay);
       dayButton.setEnabled(isDateValid(year, currentMonth, day));
   }
};

My isDateValid(( 方法:

import java.util.Calendar;
public class DateValidator {
    public boolean isDateValid(int year, int currentMonth, int day) {
        if(Calendar.MONTH < currentMonth-1)return false;
        else {
            return true;
        }
    }
}

我不得不创建一个新类,因为我已经在另一个类中使用代号一中的日历,但它不提供Calendar.MONTH。我无法拾取未来的月份,但它仍然允许我拾取未来的日子和未来的几年。我希望我可以使用原始java.util.Date中的Date.after((方法,代号One中的Date没有after((方法,这使我很难找到一种方法。有什么帮助吗?

您可以派生Calendar并自己提供该逻辑:

Calendar cld = new Calendar() {
   protected void updateButtonDayDate(Component dayButton, int year, int currentMonth, int day) {
       super.updateButtonDayDate(dayButton, year, currentMonth, currentDay);
       dayButton.setEnabled(isDateValid(year, currentMonth, day));
   }
};

在这种情况下,isDateValid()只能是过去的日期:

private boolean isDateValid(int year, int currentMonth, int day) {
   java.util.Calendar cld = java.util.Calendar.getInstance();
   cld.set(java.util.Calendar.YEAR, year);
   cld.set(java.util.Calendar.MONTH, currentMonth);
   cld.set(java.util.Calendar.DAY_OF_MONTH, day);
   return cld.getTime().getTime() < System.currentTimeMillis();
}

最新更新