You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中DatePicker选择日期仅返回当前日期问题求助

问题解决:DatePicker始终返回当前日期的修复

你的代码里有两个关键问题导致选中日期不生效:

  1. 没有使用选中的日期参数:在onDateSet回调中,你直接用new Date()获取当前时间,完全忽略了回调返回的year、month、day(用户实际选中的日期)。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:25:17