确切地说,Android DatePicker.setMinDate()和DatePicker.setMaxDate()会做什么?

时间:2019-07-17 17:26:05

标签: android android-datepicker

我正在开发一个希望用户选择日期的应用程序,因此我正在使用DatePickerDialog

我希望用户只能选择在一定范围内的日期,因此我认为我将使用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.829Z ,而viewModel.getMaxDate().toEpochSecond()给我 2019 -07-16T15:12:39.563Z ,它们分别是 1563214724 1563289959 的有效(类型Long)日期。

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

enter image description here

我无法选择任何日期。

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

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

我明白了:

enter image description here

同样,仍然无法选择任何日期。

除了日期不一致外,我完全看不到setMinDate()setMaxDate()如何影响任何事情。我仍然可以选择minmax范围之外的日期。阅读开发人员参考资料时说:

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

“此NumberPicker支持” 是什么意思????显然,这并不意味着“限制用户可以选择的内容” ,因为我无论如何都不能选择任何东西。

那么,同样,DatePicker.setMinDate()和DatePicker.setMaxDate()到底能做什么?


编辑:

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

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

1 个答案:

答案 0 :(得分:1)

您的最小日期和最大日期都不是一天的一部分(2019-07-15和2019-07-16)。用户别无选择。需要进行更大范围的日期选择。

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