Android Studio中DatePicker选择日期仅返回当前日期问题求助
问题解决:DatePicker始终返回当前日期的修复
你的代码里有两个关键问题导致选中日期不生效:
- 没有使用选中的日期参数:在
onDateSet回调中,你直接用new Date()获取当前时间,完全忽略了回调返回的year、month、day(用户实际选中的日期)。 setMaxDate设置位置错误:限制最大日期的代码应该在对话框显示前配置,不需要在回调里重复执行。
修正后的代码:
birthdate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { calendar = Calendar.getInstance(); year = calendar.get(Calendar.YEAR); month = calendar.get(Calendar.MONTH); dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); datePickerDialog = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker datePicker, int selectedYear, int selectedMonth, int selectedDay) { // 用选中的日期参数构建Calendar对象 Calendar selectedCalendar = Calendar.getInstance(); selectedCalendar.set(selectedYear, selectedMonth, selectedDay); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); displaydate = format.format(selectedCalendar.getTime()); date.setText(displaydate); } }, year, month, dayOfMonth); // 在对话框显示前设置最大可选日期 datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis()); datePickerDialog.show(); } });
关键修改说明:
- 将
setMaxDate移到datePickerDialog.show()之前,确保打开对话框时就限制了最大可选日期 - 在
onDateSet中,通过回调返回的selectedYear、selectedMonth、selectedDay(重命名参数避免和全局变量混淆)构建选中的Calendar对象,再转成格式化后的日期字符串 - 避免直接使用
new Date(),因为它始终返回当前系统时间
内容的提问来源于stack exchange,提问作者moskiteers
相关产品推荐
相关产品推荐

