Android DatePicker.setMinDate() 和 DatePicker.setMaxDate() 究竟做了什么?

What, exactly, does Android DatePicker.setMinDate() and DatePicker.setMaxDate() do?

我正在开发一个应用程序,我希望用户在其中 select 约会,所以我使用 DatePickerDialog.

我希望用户能够 select 约会 仅在一定范围内 ,所以我想我会使用 DatePicker.setMinDate()DatePicker.setMaxDate() 方法来限制他们的选择。这是我用的:

DatePickerDialog datePickerDialog = new DatePickerDialog(this);
datePickerDialog.getDatePicker().setMinDate(viewModel.getMinDate().toEpochSecond());
datePickerDialog.getDatePicker().setMaxDate(viewModel.getMaxDate().toEpochSecond());
datePickerDialog.show();

在我的应用程序的特定实例中,viewModel.getMinDate().toEpochSecond() 给出 2019-07-15T18:18:44.829ZviewModel.getMaxDate().toEpochSecond() 给出我 2019-07-16T15:12:39.563Z,它们都是 1563214724 和 [=] 的有效(类型 Long)日期64=]1563289959分别.

但是,当我的 DatePicker 对话框打开时,我得到这个:

我不能 select 任何日期。

但是,如果我尝试这样做:

DatePickerDialog datePickerDialog = new DatePickerDialog(this);
datePickerDialog.getDatePicker().setMinDate(new Date().getTime());
datePickerDialog.getDatePicker().setMaxDate(new Date().getTime() + 1000L);
datePickerDialog.show();

我明白了:

同样,仍然不能select任何日期。

除了日期不一致,我根本看不出 setMinDate()setMaxDate() 有什么影响。我仍然可以 select 在 minmax 范围之外约会。阅读开发人员参考,它说:

设置此 NumberPicker 支持的最小日期(以毫秒为单位)自 1970 年 1 月 1 日以来 00:00:00 在 TimeZone#getDefault() 时区。

那是什么意思"supported by this NumberPicker"???显然,这并不意味着"limits what a user can and cannot pick",因为我无论如何都无法选择。

那么,DatePicker.setMinDate() 和 DatePicker.setMaxDate() 到底做了什么?


编辑:

感谢 @MobileMon 这是我使用的解决方案:

Calendar calendar = Calendar.getInstance();
calendar.set(minDate.getYear(), (minDate.getMonthValue() - 1), minDate.getDayOfMonth());
return calendar.getTimeInMillis();

您的最小和最大日期甚至不是一天(2019-07-15 和 2019-07-16)。用户别无选择。需要为日期选择做一个更大的范围。

在第二个示例中,您说的是 new Date().getTime(),情况相同。尝试将其设置为喜欢 '9/7/2016' - 例如 '12/3/2019'