Android,检查日期选择器中的日期是否在未来

Android, check that a date from datepicker is not in the future

在我的 activity 中,用户可以通过日期选择器 select 一个日期。我要确保 selected 日期不在未来。

到目前为止得到了什么:

private String textStart="";
    private String textEnd="";
    private String setToday="";

calendar = Calendar.getInstance();
        year = calendar.get(Calendar.YEAR);
        month = calendar.get(Calendar.MONTH);
        day = calendar.get(Calendar.DAY_OF_MONTH);
        setToday = day+"/"+(month+1)+"/"+year;

当我从日期选择器中选择日期时

private DatePickerDialog.OnDateSetListener myDateListener
        = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
        // TODO Auto-generated method stub
        // arg1 = year
        // arg2 = month
        // arg3 = day
        showDateStart(arg1, arg2 + 1, arg3);
    }

调用方法 showDateStart 检查日期范围

private void showDateStart(int year, int month, int day) {
        textDateStart.setText(new StringBuilder().append(day).append("/")
                .append(month).append("/").append(year));
        startStamp=true;
        textStart = day+"/"+month+"/"+year;
        if(textStart.compareTo(setToday)>0){
            textStart = setToday;
            Toast.makeText(getActivity(), "out of scope::"+setToday,
                    Toast.LENGTH_LONG).show();
            textDateStart.setText(setToday);
        }

    }

但如果我选择 1/1/2016 则不起作用,因为今天是 22/2/2015 textStart 的值不超过 settoday

sorry for my mistake it first question.

作为奖励:是否可以将日期选择器限制为仅显示截至今天的日期?

您可以从 DatePickerDialog 获取基础 DatePicker(只需调用 getDatePicker())并使用以下方法设置其范围:

其中参数是默认时区自 1970 年 1 月 1 日以来的通常毫秒数 00:00:00。当然,您仍然需要计算这些值,但这对于日历 class 来说应该是微不足道的:只需获取当前日期并加上或减去 x 年。

更细心的 reader 会注意到上述设置器在 API 级别 11 之前不可用。如果您只针对该(或更新的)平台,那么您就很好去。如果您还想支持 Gingerbread 设备(Android 2.3 / API 9+ 级),您可以使用 backported version of DatePicker 代替。

从这里开始:Set Limit on the DatePickerDialog in Android?