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.829Z,viewModel.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 在 min
和 max
范围之外约会。阅读开发人员参考,它说:
设置此 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'
我正在开发一个应用程序,我希望用户在其中 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.829Z,viewModel.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 在 min
和 max
范围之外约会。阅读开发人员参考,它说:
设置此 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'