Android studio:DatePickerDialog cant setMaxDate to 1998

时间:2016-10-19 14:43:03

标签: android

我正在制作一份带有生日详细信息的登记表。但是我需要将它设置为18年前的最大值。但是当我view.setMaxDate(1998);在第一组上没有任何反应时,但在第二组中,对话框中的最大日期为1970。这是我的代码人员。

初始化日历

final Calendar cal = Calendar.getInstance();
    year_x = 1998;
    month_x = cal.get(Calendar.MONTH);
    day_x = cal.get(Calendar.DAY_OF_MONTH);

DatePickerDialog

public void showDialogOnButtonClick(){
    etBirthDate = (EditText)findViewById(R.id.etBirthDate);

    etBirthDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDialog(DIALOG_ID);
        }
    });
}

@Override
protected Dialog onCreateDialog(int id) {
  if(id == DIALOG_ID) {
      return new DatePickerDialog(this, dpListener, year_x, month_x, day_x);
  }
      return null;
  }

DatePickerDialog.OnDateSetListener dpListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    view.setMaxDate(1998);
    year_x = year;
    month_x = monthOfYear + 1;
    day_x = dayOfMonth;
    etBirthDate.setText(month_x + "/" +  day_x + "/" + year_x);
    }
};

2 个答案:

答案 0 :(得分:0)

setMaxDate(...)的参数应该是Unix时间戳。

在这种情况下,1998年1月1日将匹配时间戳883612800000

但是,您可能想要做的是获取当前时间戳并减去18年内的秒数。

要使它具有从头开始的正确日期,

@Override
protected Dialog onCreateDialog(int id) {
    if(id == DIALOG_ID) {
        return new DatePickerDialog(this, dpListener, year_x, month_x, day_x);
    }
    return null;
}

@Override
protected Dialog onCreateDialog(int id) {
    if(id == DIALOG_ID) {
        DatePickerDialog dialog = new DatePickerDialog(this, dpListener, year_x, month_x, day_x);
        dialog.setMaxDate(883612800000);
        return dialog;
    }
    return null;
}

答案 1 :(得分:-1)

1998年setMaxDate中的这一设置行似乎是错误的。 DatePicker的这种方法需要Epoch。请设置这样的东西,它会起作用。

//view.setMaxDate(1998);
view.setMaxDate(1546210800000L);

所以在你的情况下这样做

view.setMaxDate(883612800000); // this will set date as 1st Jan 1998. Change the time accordingly.