我正在制作一份带有生日详细信息的登记表。但是我需要将它设置为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);
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);
}
};
答案 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.