【问题标题】:Date Picker Validation in android studioandroid studio中的日期选择器验证
【发布时间】:2018-04-26 08:52:01
【问题描述】:

当今天的日期在 1-15 之间时,启用上个月的 16-31 日期。 当今天日期在 16-31 之间时,启用当前月份 1-15 日期。我的代码是请解决我的问题:

 private void DateDialog() {
        final DatePickerDialog dpDialog = new DatePickerDialog(this,android.app.AlertDialog.THEME_DEVICE_DEFAULT_DARK,new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker datePicker, int day, int month, int year) {
                cal = Calendar.getInstance();
                cal.setTimeInMillis(System.currentTimeMillis());
                //int curyear = cal.get(Calendar.YEAR);
                cal.set(day, month, year);

            }
        }, day, month, year);
        if ((day < 15)) {
            int month=cal.get(Calendar.MONTH);
            Log.e("Month", String.valueOf(month));
            int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
            Log.e("days", String.valueOf(days));
            int lastday = days-day;
            Log.e("Lastday", String.valueOf(lastday));
            dpDialog.getDatePicker().setMinDate((month-1)+System.currentTimeMillis()-(1000 * 60 * 60 * 24*(days-day)));
            long now = System.currentTimeMillis() - 1000;
//        dp_time.setMinDate(now);
            dpDialog.getDatePicker().setMaxDate((month-1)+now +(1000 * 60 * 60 * 24 *15));


        }
        else if ((day > 15)) {
            int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
            Log.e("days", String.valueOf(days));
            int lastday = days - 15;
            Log.e("lastday", String.valueOf(lastday));
            int month=cal.get(Calendar.MONTH);
            Log.e("Month", String.valueOf(month));
            dpDialog.getDatePicker().setMinDate((1000*60*60*24*(day+1)));
            long now = System.currentTimeMillis() - 1000;
//        dp_time.setMinDate(now);
            dpDialog.getDatePicker().setMaxDate(now +(1000 * 60 * 60 * 24 *lastday));
        }
        dpDialog.show();

【问题讨论】:

    标签: android android-studio datepicker android-dialog android-datepicker


    【解决方案1】:

    您的DatePickerDialog 构造函数值不正确,您传递的是日期而不是年份,反之亦然,条件也很少出现问题。 这是更新的代码。只需用这个替换你的代码。

      private void DateDialog() {
             final Calendar calendar = Calendar.getInstance();
    
            final DatePickerDialog dpDialog = new DatePickerDialog(this, android.app.AlertDialog.THEME_DEVICE_DEFAULT_DARK, new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker datePicker, int day, int month, int year) {
                    cal.set(day, month, year);
    
    
    
                    //  cal.set(day, month, year);
    
    
                }
            }, year, month, day);
    
            if (day > 15) {
                calendar.set(Calendar.DAY_OF_MONTH, 1);
    
                dpDialog.getDatePicker().setMinDate(calendar.getTimeInMillis());
                dpDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
    
            } else {
                calendar.add(Calendar.MONTH, -1);
                calendar.set(Calendar.DAY_OF_MONTH, 16);
    
                dpDialog.getDatePicker().setMinDate(calendar.getTimeInMillis());
                dpDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
    
            }
    
            dpDialog.show();
    
        }
    

    【讨论】:

    • Hello 代码很好,但每次我想修复它时,每次选择 1 次后,16-31 日历的日期都会发生变化。并在当前日历中选择 1 到当前有效日期,但我也希望 1-15 日期有效
    • 您能否分享您的完整代码,您如何选择日期以及您从日历中获取日、年和月的方式,以便我可以在您出错的地方查看您的代码.
    • 你好代码很好,但上个月日历的每次选择日期后都会更改,但我希望始终显示 16 到上个月的最后一天。
    • 请给出解决方案\
    • 问题是每次你选择日期如果移动到你选择的日期,你可以做些什么来避免这种情况。您需要获取两个日历,每次调用 DateDialog() 方法时重新初始化您的日历。
    猜你喜欢
    • 2012-09-28
    • 2015-01-29
    • 1970-01-01
    • 2022-01-22
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多