为日期选择器对话框设置最小年份(用于 select DOB)

Set minimum year (use to select DOB) for Datepicker dialog

我已经为我的代码创建了一个函数,该函数设置了一个规则,将用户限制在 select 前一天,然后系统日期来自日期选择器对话框

protected void setMinMax() {
    Calendar minAllowedDate = CommUtils.getMinAllowedDate();
    minAllowedDate.add(Calendar.MILLISECOND, -1000);
      datePickerDialog.getDatePicker().setMinDate(minAllowedDate.getTimeInMillis());

现在我想为 select DOB 的用户创建另一个日期选择器,我想做的是设置一个规则,用户 DOB 应该在 4-150 岁之间,这意味着用户可以select 应该是系统日期的 -4 & -150。如果使用上面的代码,我应该在

中输入什么
minAllowedDate.add(Calendar.MILLISECOND, -1000);

我曾尝试使用以下代码将 150 年作为最小选项

minAllowedDate.add(Calendar.YEAR, -150);

使用下面的最小值和最大值

Calendar calStart = new GregorianCalendar();
calStart.setTime(new Date());
calStart.add(Calendar.YEAR, -150);

Calendar calEnd = new GregorianCalendar();
calEnd.setTime(new Date());
calEnd.add(Calendar.YEAR, -4);

您可以使用 android:startYear,其中包括开始年份。

查看文档here

发现大多数解决方案都使用 .add(Calendar.YEAR,-4) 方法,但这也限制了月份和日期为 select。例如,当当前日期是 11/Jun/2018,运行 那行代码你可以在 4 年前(2018-4=2014)但是也限制在你的月 + 日,你只能select 日期早于 11/Jun/2018.

经过几次尝试,我想出了手动将日期和月份设置为 31/Dec 的解决方案,这样我就可以选择从 2014 年 12 月 31 日到 2014 年 1 月 1 日的选项

    Calendar calStart = new GregorianCalendar();
    calStart.setTime(new Date());
    calStart.set(Calendar.MONTH, 11);
    calStart.set(Calendar.DAY_OF_MONTH, 31);
    calStart.add(Calendar.YEAR, -150);

    Calendar calEnd = new GregorianCalendar();
    calEnd.setTime(new Date());
    calEnd.set(Calendar.MONTH, 11);
    calEnd.set(Calendar.DAY_OF_MONTH, 31);
    calEnd.add(Calendar.YEAR,-4);
    datePickerDialog.getDatePicker().setMinDate(calStart.getTimeInMillis());
    datePickerDialog.getDatePicker().setMaxDate(calEnd.getTimeInMillis());